ReceiveErrorHandling 枚举
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
指定对有害消息的处理。
public enum class ReceiveErrorHandling
public enum ReceiveErrorHandling
type ReceiveErrorHandling =
Public Enum ReceiveErrorHandling
- 继承
字段
Drop | 1 | 此选项可删除病毒消息。 消息始终没有传递到应用程序。 如果此时消息的 TTL 已过期,则此消息就会出现发送端的死信队列中。 如果不是这种情况,则该消息将不会显示在任何位置。 此选项指示用户实际并不在意该消息是否丢失。 |
Fault | 0 | 此选项会向导致 ServiceHost 出现错误的侦听器发送一个错误。 必须利用其他一些外部机制将该消息从应用程序中移除,应用程序才能继续处理队列中的消息。 |
Move | 3 | 选择此选项会将病毒消息移动到病毒消息队列,以供以后由病毒消息处理应用程序进行处理。 |
Reject | 2 | 选择此选项会指示消息队列 (MSMQ) 将否定确认发送回发送队列管理器,以说明应用程序无法接收此消息。 该消息会放入发送队列管理器的死信队列中。 |
示例
下面的配置代码演示如何在服务配置文件中设置该属性:
<configuration>
<appSettings>
<!-- use appSetting to configure MSMQ queue name -->
<add key="queueName" value=".\private$\ServiceModelSamplesPoison" />
<add key="baseAddress" value="http://localhost:8000/orderProcessor/poisonSample"/>
</appSettings>
<system.serviceModel>
<services>
<service
name="Microsoft.ServiceModel.Samples.OrderProcessorService">
<!-- Define NetMsmqEndpoint -->
<endpoint address="net.msmq://localhost/private/ServiceModelSamplesPoison"
binding="netMsmqBinding"
bindingConfiguration="PoisonBinding"
contract="Microsoft.ServiceModel.Samples.IOrderProcessor" />
</service>
</services>
<bindings>
<netMsmqBinding>
<binding name="PoisonBinding"
receiveRetryCount="0"
maxRetryCycles="1"
retryCycleDelay="00:00:05"
receiveErrorHandling="Fault"
/>
</netMsmqBinding>
</bindings>
</system.serviceModel>
</configuration>
注解
有害消息是反复尝试传递到应用程序时失败的消息。 这仅在使用基于消息队列 (MSMQ) 的绑定时适用。 默认值为 Fault
,此时侦听器会出错,ServiceHost 也会因此出错。 如果服务因为病毒消息而出错,则会引发 MsmqPoisonMessageException。 该异常含有 MSMQ 消息的 LookupId
,可用于通过 System.Messaging API 将消息移除。 枚举的某些值 ReceiveErrorHandling (如 Reject
和 Move
)仅在 Windows Vista 上可用。 将 ReceiveErrorHandling 属性设置为该枚举的其中一个值可以控制病毒消息处理。