2010-04-22 93 views
1

使用MessageQueue(string queuePath)構造函數創建了System.Messaging.MessageQueue後,試圖使用MessageQueue.Send(obj)導致「無法生成臨時類(result = 1)」異常,並帶有其他文本: '錯誤CS0122:'System .__ ComObject'由於其保護級別而無法訪問'。從C#發送到MSMQ隊列時,發生CS0122錯誤的原因和解決方案是什麼?

隊列本身完全控制給每個人。當查詢MessageQueue對象的讀寫權限時,它返回SendAndReceive。導致此錯誤的原因是什麼以及如何解決它?

回答

5

哦,快樂,運行時錯誤與編譯時錯誤混在一起。 MessageQueue使用XML序列化來序列化不是消息的對象。如果您在編譯時沒有使用sgen.exe創建序列化程序集(您應該使用真正的),那麼它會在運行時生成程序集。

很明顯,失敗後,傳遞給Send()的任何對象都不支持XML序列化。從錯誤信息來看,這可能是因爲它不是一個簡單的.NET類。解決它通過使它成爲一個簡單的.NET類,一個存活XmlSerializer.Serialize()和回來。

+0

這確實是我的問題的正確答案,但因爲它不是我的問題的解決方案。我最終編寫了自己的格式化程序,實現了IMessageFormatter,它能夠以合作伙伴應用程序可以處理的格式序列化數據。 將一個扁平的unwrapped字符串放到.net的隊列中是比較困難的。 – Erick 2010-04-23 20:03:26