共用方式為


<msmqIntegrationBinding>

定義繫結,此繫結可透過 MSMQ 傳遞訊息來提供查詢支援。

<configuration>
  <system.serviceModel>
    <bindings>
      <customBinding>
        <binding>
          <msmqIntegrationBinding>

Syntax

<msmqIntegrationBinding>
  <binding closeTimeout="TimeSpan"
           customDeadLetterQueue="Uri"
           deadLetterQueue="Uri"
           durable="Boolean"
           exactlyOnce="Boolean"
           maxReceivedMessageSize="Integer"
           maxRetryCycles="Integer"
           name="String"
           openTimeout="TimeSpan"
           receiveContextEnabled="Boolean"
           receiveErrorHandling="Drop/Fault/Move/Reject"
           receiveTimeout="TimeSpan"
           receiveRetryCount="Integer"
           retryCycleDelay="TimeSpan"
           sendTimeout="TimeSpan"
           serializationFormat="XML/Binary/ActiveX/ByteArray/Stream"
           timeToLive="TimeSpan"
           useMsmqTracing="Boolean"
           useSourceJournal="Boolean">
  </binding>
</msmqIntegrationBinding>

屬性和項目

下列各節說明屬性、子元素和父元素

屬性

屬性 描述
closeTimeout TimeSpan 值,指定提供用來讓關閉作業完成的時間間隔。 這個值應該大於或等於 Zero。 預設為 00:01:00。
customDeadLetterQueue URI,其中包含每個應用程式寄不出的信件佇列的位置,所有已過期、無法傳輸或傳遞的訊息都會放到該佇列中。

寄不出的信件佇列是傳送應用程式佇列管理員上的佇列,用於無法傳遞的過期訊息。

CustomDeadLetterQueue 指定的 URI 必須使用 net.msmq 配置。
deadLetterQueue 指定要使用何種寄不出信件佇列類型的 DeadLetterQueue 值 (如果有的話)。

寄不出的信件佇列是無法傳遞至應用程式的訊息存放的位置。

對於需要 exactlyOnce 保證的訊息 (也就是 exactlyOnce 屬性設定為 true),這個屬性預設為 MSMQ 中的整個系統交易式寄不出信件佇列。

對於不需要保證的訊息,這個屬性預設為 null
持久 布林值,指出佇列中的訊息為永久性 (Durable) 或變動性 (Volatile)。 永久性的訊息不受佇列管理員毀損的影響,但變動性訊息會受到影響。 如果應用程式需要較短的延遲時間,並可以容許訊息偶爾遺失,變動性訊息就很有用。 如果 exactlyOnce 屬性設定為 true,則訊息必須為永久性。 預設值為 true
exactlyOnce 布林值,這個值會指出每個訊息是否只傳遞一次。 接著會通知傳送者傳遞失敗。 durablefalse 時,會忽略這個屬性,並傳輸訊息,但不具傳遞保證。 預設為 true。 如需詳細資訊,請參閱ExactlyOnce
maxReceivedMessageSize 正整數,定義此繫結可以處理的訊息大小上限 (以位元組為單位,包括標頭)。 超出此限制之訊息的寄件者將會收到 SOAP 錯誤。 收件者會捨棄訊息,然後在追蹤記錄檔中建立此事件的項目。 預設值為 65536。 這項關於訊息大小的限制是為了避免受到阻絕服務 (DoS) 攻擊。
maxRetryCycles 整數,指出有害訊息偵測功能使用的重試循環次數。 當訊息無法在循環的傳遞嘗試中成功傳遞,便成為有害訊息。 預設值為 2。 如需詳細資訊,請參閱MaxRetryCycles
NAME 包含繫結之組態名稱的字串。 這個值應該是唯一的,因為它會當做繫結的識別使用。 從 .NET Framework 4 開始,不需要有名稱的系結和行為。 如需預設設定、無名稱繫結與行為的詳細資訊,請參閱簡化的組態 (部分機器翻譯) 與WCF 服務的簡化組態 (部分機器翻譯)。
openTimeout TimeSpan 值,指定提供用來讓開啟作業完成的時間間隔。 這個值應該大於或等於 Zero。 預設為 00:01:00。
receiveErrorHandling ReceiveErrorHandling 值,指定如何處理有害和不可分派的訊息。
receiveRetryCount 整數,這個整數會指定如果從應用程式佇列到應用程式的訊息傳輸失敗,佇列管理員應嘗試的立即重試次數上限。

如果達到傳遞嘗試的次數上限,且應用程式未存取訊息,訊息便會傳送到重試佇列,以便日後再次傳遞。 在訊息傳回傳送佇列之前的時間長度是由 retryCycleDelay 控制。 如果重試循環達到 maxRetryCycles 值,則訊息便會傳送到有害訊息佇列,或是負認可會傳回至寄件者。
receiveTimeout TimeSpan 值,指定接收作業完成其作業之時間間隔。 這個值應該大於或等於 Zero。 預設為 00:10:00。
receiveContextEnabled 布林值,這個值會指定接收在佇列內處理訊息的內容是否已啟用。 這設定為 true 時,服務可在佇列中將訊息列為「尖峰」以開始處理它,且如果出錯而擲回例外狀況,則訊息會保持在佇列中。 服務也可「鎖定」訊息以便稍後再重試處理。 ReceiveContext 會提供「完成」訊息的機制,一旦處理過訊息,即會從佇列中移除訊息。訊息將不再進行讀取,並會透過網路將它重新寫入至佇列,另外,個別訊息在處理時也不會再於不同的服務執行個體間跳躍。
retryCycleDelay TimeSpan 值,指定嘗試傳遞無法立即傳遞之訊息時,重試循環之間的時間延遲。 該值只定義最小等待時間,因為實際的等待時間會更長。 預設值為 00:30:00。 如需詳細資訊,請參閱RetryCycleDelay
sendTimeout TimeSpan 值,指定提供用來讓傳送作業完成的時間間隔。 這個值應該大於或等於 Zero。 預設為 00:01:00。
serializationFormat 定義用來序列化訊息本文的格式。 此屬性的型別為 MsmqMessageSerializationFormat
timeToLive TimeSpan 值,指定訊息在到期並置入寄不出的信件佇列之前,訊息仍保持有效的時間。 預設為 1.00:00:00。

設定這個屬性可確保有時效的訊息在由接收應用程式處理之前不會變成過時。 佇列中未由接收應用程式於指定的時間間隔內使用的訊息,即稱為過期訊息。 過期訊息會傳送至特別的佇列,稱為寄不出的信件佇列。 寄不出的信件佇列的位置是使用 DeadLetterQueue 屬性設定,或根據保證設定為適當的預設值。
useMsmqTracing 布林值,指定是否應追蹤由此繫結處理的訊息。 預設值為 false。 如果啟用追蹤,每當訊息離開或到達訊息佇列電腦時,都會建立報告訊息並傳送至報告佇列。
useSourceJournal 布林值,指定是否要將此繫結處理之訊息的複本儲存在來源日誌。 預設值為 false

有些佇列應用程式要記錄已離開電腦輸出佇列的訊息,這些程式可以將訊息複製到日誌佇列。 只要訊息一離開輸出佇列,而且收到目的端電腦已收到訊息的認可,訊息的複本就會保留在傳送端電腦的系統日誌佇列中。

{serializationFormat} 屬性

描述
Xml XML 格式
Binary 二進位格式
ActiveX ActiveX 格式
ByteArray 將物件序列化為位元組陣列。
Stream 格式化為資料流的本文

子元素

元素 描述
<security> 定義繫結的安全性設定。 此項目的型別為 MsmqIntegrationSecurityElement

父項目

元素 描述
<bindings> 這個項目會保存標準和自訂繫結的集合。

備註

這個繫結元素可以用來讓 Windows Communication Foundation (WCF) 應用程式在現有 MSMQ 應用程式中傳送和接收訊息,該應用程式會使用 COM、MSMQ 原生 API 或 System.Messaging 命名空間中所定義的類型。您可使用此設定元素指定如何定址佇列、傳輸保證、訊息是否永久儲存以及應如何保護和驗證訊息。 如需詳細資訊,請參閱如何:與 WCF 端點和訊息佇列應用程式交換訊息

範例

<configuration>
  <system.ServiceModel>
    <bindings>
      <msmqIntegrationBinding>
        <binding closeTimeout="00:00:10"
                 openTimeout="00:00:20"
                 receiveTimeout="00:00:30"
                 sendTimeout="00:00:40"
                 deadLetterQueue="net.msmq://localhost/blah"
                 durable="true"
                 exactlyOnce="true"
                 maxReceivedMessageSize="1000"
                 maxImmediateRetries="11"
                 maxRetryCycles="12"
                 poisonMessageHandling="Disabled"
                 rejectAfterLastRetry="false"
                 retryCycleDelay="00:05:55"
                 timeToLive="00:11:11"
                 useSourceJournal="true"
                 useMsmqTracing="true"
                 serializationFormat="Binary">
          <security mode="None" />
        </binding>
      </msmqIntegrationBinding>
    </bindings>
  </system.ServiceModel>
</configuration>

另請參閱