2011-11-16 62 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 –