我正在尝试设置WCF服务来处理毒药队列消息,而我正在努力这样做。我将WCF服务配置为:
<endpoint address="net.msmq://serverip/private/services/eventservice.svc;poison"
binding="netMsmqBinding"
bindingConfiguration="MsmqBindingTransactionalSecurityPoisonHandling"
contract="App.IEventService" />
我的绑定配置是:
<binding name="MsmqBindingTransactionalSecurityPoisonHandling" exactlyOnce="true" durable="true">
<security mode="None" />
</binding>
但是,我收到此错误:
无法检测队列是否为事务性。
和
转换&#39; serverip \ private $ \ services / eventservice.svc; poison&#39;时发生错误队列路径名称为格式名称:指定的队列路径名称无效。 (-1072824300,0xc00e0014)。排队通道上的所有操作都失败了。确保队列地址有效。必须在启用Active Directory集成的情况下安装MSMQ,并且可以访问它。
队列路径名有效,启用了Active Directory集成的MSMQ,所以我不明白错误发生的原因???
编辑:我的毒物队列处理服务的定义如下:
<ServiceBehavior(AddressFilterMode:=AddressFilterMode.Any, InstanceContextMode:=InstanceContextMode.Single, ConcurrencyMode:=ConcurrencyMode.Single)>
Public Class EventService
Implements IEventService
<OperationBehavior(TransactionScopeRequired:=True, TransactionAutoComplete:=True)>
Public Sub ProcessEvent(msg As EventMessage) Implements IEventService.ProcessEvent
End Sub
End Class
答案 0 :(得分:1)
好的,如果我理解的话,你原来的netMsmq毒药队列地址会以某种方式被“翻译”到字符串中,然后无法解析为格式名称(根据错误信息)。
我可以问你是否使用交易队列?诚实的问题,但您已在绑定配置中指定了事务语义,这也必须与服务操作实现中的相应OperationBehaviorAttribute相结合,当然还有事务队列。
此外,您是否在服务实现上实现了AddressFilterMode?对于有害消息处理,应将其设置为“Any”,并且我认为对队列地址解析有影响,并且对于有害消息处理程序是必需的。
[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]
public MyPoisonHanderImplementation : IMyPoisonHandler
{...}
另外,当你只使用私有队列时,我有点困惑为什么你需要启用AD集成?或者这是另一个原因的要求吗?