将序列化数据发送到MSMQ时发生InvalidCastException
问题描述:
我尝试将序列化数据发送到MSMQ,但得到“System.InvalidCastException:指定的转换无效”。错误。我把我的发送方法和日志跟随。请建议我解决这个错误。将序列化数据发送到MSMQ时发生InvalidCastException
// Here MyMessage is my class which contain some
// stuff which I want to pass to MSMQ.
public void Send(MyMessage myMessage)
{
XmlSerializer ser = new XmlSerializer(typeof(MyMessage));
StringBuilder sb = new StringBuilder();
using (StringWriter writer = new StringWriter())
{
ser.Serialize(writer, myMessage);
Debug.WriteLine(writer.ToString());
}
Message _myMessage = new Message(myMessage, new BinaryMessageFormatter());
//_messageQueue is object of MSMQMessage
_messageQueue.Send(_myMessage);
}
登录:
System.InvalidCastException:指定的转换无效。” 在MyClassName.Send(MyMessage myMessage)
建议:我觉得这个错误是发生是由于 “typeof运算”但我不知道在这一方面。
答
我知道我迟到了,但我有今天同样的问题并解决它。由于这是首次在Google中弹出的链接之一,因此我会分享我的解决方案。
在您的代码中,您正在使用全局消息队列变量。 Send方法不是线程安全的,所以如果您有多个线程尝试使用同一个对象发送消息,则可能会出现此类错误。
一种解决方案是使用锁定功能等
// Here MyMessage is my class which contain some
// stuff which I want to pass to MSMQ.
public void Send(MyMessage myMessage)
{
XmlSerializer ser = new XmlSerializer(typeof(MyMessage));
StringBuilder sb = new StringBuilder();
using (StringWriter writer = new StringWriter())
{
ser.Serialize(writer, myMessage);
Debug.WriteLine(writer.ToString());
}
Message _myMessage = new Message(myMessage, new BinaryMessageFormatter());
//_messageQueue is object of MSMQMessage
lock(_objlck)
{
_messageQueue.Send(_myMessage);
}
}
一种选择是具有的MessageQueue的新实例中的每个线程。
这对我有用。
+0
这节省了我很多时间,谢谢! – 2017-04-12 19:40:29
1. MyMessage已经序列化。 2.执行过程中不是每次都发生错误。 3.无法重现此错误。 4. typeof和GetType输出有什么不同?我的意思是如果通过GetType替换typeof,那么它可以吗? – rhatwar007 2014-09-04 06:08:21