【发布时间】:2010-12-26 21:52:29
【问题描述】:
我正在尝试使用 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>
两个服务都运行正常。
问题是当消息被放入毒物队列时,毒物服务没有处理该消息。 我观察了毒药队列中的消息,它们仅针对原始服务。那么毒服务如何处理它们呢?通过 MSDN 后,我知道通过设置服务行为属性,WCF 通道可以解决这个问题。以下段落解释相同。
“有害消息队列中的消息是发送给正在处理消息的服务的消息,它可能与有害消息服务端点不同。因此,当有害消息服务从队列中读取消息时,WCF通道层发现端点不匹配,不发送消息。在这种情况下,消息被发送到订单处理服务,但被毒消息服务接收。即使消息被发送到,也要继续接收消息一个不同的端点,我们必须添加一个 ServiceBehavior 来过滤地址,其中匹配标准是匹配消息发送到的任何服务端点。这是成功处理您从有害消息队列中读取的消息所必需的。"
但是我的毒服务没有处理毒消息?
我无法弄清楚问题。
【问题讨论】:
-
嗯,您只能在 IIS 中托管 http 绑定。你的意思是 WAS?