我尝试将序列化数据发送到MSMQ,但得到" System.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"但我不确定那方面。
答案 0 :(得分:7)
我知道我迟到了,但今天我遇到了同样的问题并解决了它。由于它是谷歌弹出窗口的第一个链接之一,我将分享我的解决方案。
在您的代码中,您使用的是全局消息队列变量。 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 :(得分:1)
将[Serializable]属性设置为Audit Message。