我有一個BizTalk 2006應用程序,它有一個使用MSMQ的發送端口。我也有一個WCF winforms託管應用程序與幾個WCF服務(在開發環境中,在生產中我使用Windows服務作爲託管)。帶有MSMQIntegrationBinding的WCF不接收隊列中的消息
我創建的一個WCF服務有一個MSMQIntegrationBinding(由於BizTalk不是WCF服務,所以NetMSMQBinding不可能)。
我看到郵件正確放置在遠程隊列上,因爲我激活了郵件選項,並在郵件隊列中看到郵件,但隊列爲空,WCF服務沒有收到郵件。
任何人都可以給我一個線索在哪裏看解決這個問題?
(編輯1):我已經做了一些調查研究在這個題目:
- 當2006年的BizTalk通信R2與MSMQ,你必須使用MSMQIntegrationBinding因爲NetMSMQBinding僅適用於WCF到WCF
- 所以我被MSMQIntegrationBinding刪除
- MSMQIntegration綁定不使用DataContract序列化程序。相反,它會基於MsmqMessageSerializationFormat屬性序列化數據。它的默認值是MsmqMessageSerializationFormat.Xml,這意味着將使用XmlSerializer。這背後的基本原理是,MSMQ集成傳輸是專門爲與本機MSMQ/System互操作而設計的。信息化應用程序
- 因爲MSMQIntegration綁定使用普通的舊XmlSerializer,所以我沒有簡單的方法使用svcutil.exe生成我的數據類。所以,我必須手動創建我datacontract類.... pfffffffffff
(參考:http://social.msdn.microsoft.com/Forums/en/wcf/thread/2d48fe90-5c2a-4156-8a3f-2e21d5638fa1和http://www.danrigsby.com/blog/index.php/2008/03/07/xmlserializer-vs-datacontractserializer-serialization-in-wcf/)
(編輯2):
我從WCF檢查診斷跟蹤數據服務和消息由於反序列化異常而被放棄。現在唯一的解決方案是手工創建datacontract類...
(編輯3):通過使用xsd.exe工具而不是svcutil.exe我創建了datacontract類,因此在此處沒有手工製作的工作; - )因此,結論是將xsd.exe用作WCF服務方法中用作參數的數據約定類。這是因爲MSMQIntegrationBinding強制您將所有數據協商類型設置爲可通過XMLSerializer而不是默認的DataContractSerializer進行序列化。
感謝Daniel,我已經知道了,但是我在.config文件中引用了它;-)我將激活它以查看WCF日誌。 – 2009-12-28 14:04:21
丹尼爾,我授予你最有用的答案,通過查看跟蹤信息很容易找到解決方案。 – 2009-12-28 21:37:43
幹得好Patrick。我很高興你解決了它。 – 2009-12-28 21:44:46