为了让WCF Service使用MsmqIntegrationBinding从队列中提取消息,是否必须通过使用MsmqIntegrationBinding的进程将从MSMQ队列中提取的消息添加到队列中?我们有一个使用System.Messaging将xml有效负载写入队列的遗留进程,当我运行该进程尝试从队列中提取消息时,没有发生任何事情(这意味着消息留在队列中)。我只是想知道,如果消息是使用另一个进程入队的,您还能使用WCF / MsmqIntegrationBinding将消息出队吗?
我知道理想情况下您应该使用DataContracts和NetMsmqBinding,但不幸的是,在他的情况下,我们无法修改查询消息的过程。
我相信你能看出来,我对WCF / MSMQ仍然一无所知,所以也许解决方案很简单。
任何建议都将不胜感激。
谢谢,
S
发布于 2011-11-17 02:56:40
MsmqIntegrationBinding可以使用不同的格式化程序来读取/写入数据到队列。这可以通过设置绑定的serializationFormat属性来完成。例如,要与COM客户端进行互操作,可以将serializationFormat设置为ActiveX。要与.net客户机进行互操作,请将其设置为Xml。
<service name="MyQueueListenner">
<!-- Active X endpoint -->
<endpoint address="msmq.formatname:DIRECT=OS:.\private$\myQueue"
binding="msmqIntegrationBinding"
bindingConfiguration="COMConfig"
contract="MyContract" />
<!-- .Net endpoint-->
<endpoint address="msmq.formatname:DIRECT=OS:.\private$\myOtherQueue"
binding="msmqIntegrationBinding"
bindingConfiguration="DotNetConfig"
contract="MyContract" />
</service>
...
<msmqIntegrationBinding>
<binding serializationFormat="ActiveX" name="COMConfig" durable="false" exactlyOnce="false">
<security mode="None" />
</binding>
<binding serializationFormat="Xml" name="DotNetConfig" durable="false" exactlyOnce="false">
<security mode="None" />
</binding>
</msmqIntegrationBinding>这使您可以使用各种格式化程序,从而最大限度地提高与队列客户端的互操作性。
完整的值列表在这里:http://msdn.microsoft.com/en-us/library/system.servicemodel.msmqintegration.msmqmessageserializationformat.aspx
https://stackoverflow.com/questions/8156629
复制相似问题