2011-11-16 48 views
1

从MSMQ队列中取出的消息是否必须通过使用MsmqIntegrationBinding的进程添加到队列中,以便WCF服务使用MsmqIntegrationBinding从队列中选择它们?我们有一个传统流程,它使用System.Messaging将xml有效内容写入队列,当我运行我的进程尝试从队列中选择消息时,什么都没有发生(意味着消息停留在队列中)。我只是想知道如果一条消息使用另一个进程排队,你仍然可以使用WCF/MsmqIntegrationBinding来排队消息吗?WCF MsmqIntegrationBinding

我知道理想情况下应该使用DataContracts和NetMsmqBinding,但不幸的是,在他的情况下,我们没有能力修改消息过程。

正如我相信你可以告诉我对WCF/MSMQ仍然非常无知,所以也许解决方案很简单。

任何建议将不胜感激。

谢谢,

小号

回答

3

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

+0

感谢@ hugh.So它还是要通过客户端使用MsmqIntegrationBinding序列化?或者,客户端是否可以简单地入队xml有效内容,并且主机/服务可以使用serializationFormat =“Xml”进行入队? – scarpacci

+0

是的,客户端可以入队一个xml有效载荷,服务可以使用Xml serializationFormat –