C# 向MSMQ发送序列化数据时引发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

我正在尝试向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”引起的,但我不确定这一点。

将[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,则可以吗?