<msmqIntegrationBinding>

定义一个绑定,此绑定通过利用 MSMQ 路由消息来提供队列支持。

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

语法

<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 一个布尔值,指示消息在队列中是持久的还是可变的。 持久消息能够在队列管理器崩溃后保留下来,而可变消息则不能。 当应用程序需要较低的延迟并且可以容忍偶尔丢失消息时,可变消息是有用的。 如果 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 格式
二进制 二进制格式
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>

另请参阅