我正试图使用MSMQ传输来处理WCF中的毒消息。
我按照以下链接创建了原始服务和毒服务:
http://msdn.microsoft.com/en-us/library/aa395218.aspx
唯一的区别是,我将这两个服务托管在IIS中,使用单个主机项目。以下是两个服务的配置:
<services>
<service behaviorConfiguration="MainMSMQWCFService.Service1Behavior"
name="MainMSMQWCFService.OrderProcessorService">
<endpoint address="net.msmq://localhost/private/servicemodelsamplespoison"
binding="netMsmqBinding" bindingConfiguration="PoisonBinding"
contract="MainMSMQWCFService.IOrderProcessor" />
</service>
<service behaviorConfiguration="MainMSMQWCFService.PoisonHandlingServiceBehavior"
name="MainMSMQWCFService.PoisonHandlingService">
<endpoint address="net.msmq://localhost/private/servicemodelsamplespoison;poison"
binding="netMsmqBinding"
bindingConfiguration="PoisonBinding2"
contract="MainMSMQWCFService.IOrderProcessor">
</endpoint>
</service>
</services>
两个服务都正常运行。
问题在于当消息被放入毒队列时,毒服务没有处理该消息。我观察了毒队列中的消息,它们只针对原始服务。那么毒服务如何处理它们呢?通过查阅MSDN,我了解到通过设置服务行为属性,WCF通道可以解决此问题。以下段落说明了相同的内容。
“毒消息队列中的消息是针对正在处理消息的服务的消息,这可能与毒消息服务端点不同。因此,当毒消息服务从队列中读取消息时,WCF通道层发现端点不匹配并且不会分派该消息。在这种情况下,该消息针对订单处理服务,但由毒消息服务接收。要继续接收消息,即使消息针对不同的端点,我们必须添加ServiceBehavior来过滤匹配标准以匹配消息寄送到的任何服务端点。这是成功处理从毒消息队列中读取的消息所必需的。”
但我的毒服务没有处理受污染的消息?
我无法找出问题所在。