C# 向MSMQ发送序列化数据时引发InvalidCastException
我正在尝试向MSMQ发送序列化数据,但获取“System.InvalidCastException:指定的强制转换无效”。错误。我把我的发送方法和日志放在后面。请给我一些解决这个错误的方法C# 向MSMQ发送序列化数据时引发InvalidCastException,c#,xml-serialization,msmq,.net,C#,Xml Serialization,Msmq,.net,我正在尝试向MSMQ发送序列化数据,但获取“System.InvalidCastException:指定的强制转换无效”。错误。我把我的发送方法和日志放在后面。请给我一些解决这个错误的方法 // Here MyMessage is my class which contain some // stuff which I want to pass to MSMQ. public void Send(MyMessage myMessage) { Xml
// 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”引起的,但我不确定这一点。将[Serializable]prpoerty设置为AuditMessage。我知道我迟到了,但我今天遇到了同样的问题并解决了。因为这是谷歌弹出窗口的第一个链接之一,我将分享我的解决方案 在代码中,您使用的是全局消息队列变量。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的新实例
这对我很有用。1.MyMessage已经序列化了。2.执行过程中有时会发生错误,而不是每次都会发生错误。3.无法再现此错误。4.typeof和GetType输出是否有任何差异?我的意思是,如果用GetType替换typeof,则可以吗?