我一直在用這個來敲我的頭,以利用。任何想法都非常受歡迎!Msmq和sgen for xmlserialization完全失敗
我有一個使用MSMQ的vb.net中的客戶端/監聽器應用程序,當我不使用sgen.exe在編譯時生成序列化時,它可以100%正常工作。
使用sgen時,它在偵聽器部件上失敗。
qOrders.Formatter = New XmlMessageFormatter(New Type() {GetType(InfoMessage)})
m = qOrders.EndReceive(e.AsyncResult)
它炸彈在米。 m.Body有錯誤"Cannot deserialize the message passed as an argument. Cannot recognize the serialization format."
,其餘的屬性也有錯誤,沒有收到一個值。
該程序集名爲strong,並且App.XmlSerializers.dll也正確簽名。我知道dll被使用,因爲我在程序運行時無法刪除它。
InfoMessage類是一個帶有3個公共字符串成員的簡單公共類。用Reflector檢查dll,我確實看到sgen生成了一個InfoMessageSerializer類。
該問題不在客戶端,因爲我刪除了DLL並運行偵聽器,它的工作原理與往常一樣。
那麼,這裏可能會出現什麼問題? :○
感謝,
約翰
編輯:鏈接到監聽來源:http://pastebin.com/TqWfLVJ0
有趣!有一個問題:兩個文檔都討論了Web服務 - 我沒有做任何與Web服務相關的事情,所以它是如何應用的?事實上,這只是MSMQ通信的一個簡單的PoC(從實際應用縮小到查明問題)。 – johnjohn
@johnjohn - 答案已展開。順便說一句,如果你的問題包含更多的代碼,特別是誰和如何實例化'XmlSerializer',這將使它成爲一個更好的問題。 –
感謝您的澄清。我更新了一個鏈接到監聽器代碼 - 它在qOrders_ReceiveCompleted方法(包含問題中的代碼)上轟炸。它根本不使用XmlAttributeOverrides。 – johnjohn