我试图用MSMQ传输处理WCF中的有害消息.
我按照以下链接创建了原始和毒药服务.
http://msdn.microsoft.com/en-us/library/aa395218.aspx
唯一的区别是不是自托管,而是在IIS中使用单个主机项目托管了2个服务.
两种服务的配置如下.
<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>
Run Code Online (Sandbox Code Playgroud)
两种服务都正常运行.
问题是当消息被放入毒物队列时,毒物服务不处理消息.我观察了Poison队列中的消息,它们仅针对原始服务.然后毒药服务如何处理它们?通过MSDN后,我知道通过设置服务行为属性,WCF通道会解决这个问题.以下paragraoh解释相同.
"有害消息队列中的消息是发往处理消息的服务的消息,可能与有害消息服务端点不同.因此,当有害消息服务从队列中读取消息时,WCF通道层会发现端点不匹配并且不调度消息.在这种情况下,消息被发送到订单处理服务但是被有害消息服务接收.即使消息被发送到不同的端点,也要继续接收消息,我们必须添加一个ServiceBehavior来过滤匹配条件匹配消息所针对的任何服务端点的地址.这是成功处理从有害消息队列中读取的消息所必需的.
但是我的毒药服务没有处理中毒的消息?
我无法弄清楚这个问题.