2010-04-22 94 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