2014-09-02 70 views
2

我尝试将序列化数据发送到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运算”但我不知道在这一方面。

+0

1. MyMessage已经序列化。 2.执行过程中不是每次都发生错误。 3.无法重现此错误。 4. typeof和GetType输出有什么不同?我的意思是如果通过GetType替换typeof,那么它可以吗? – rhatwar007 2014-09-04 06:08:21

回答

1

集[Serializable接口] prpoerty到AuditMessage。

+0

是的,但它仍然有错误。 – rhatwar007 2014-09-02 07:58:17

6

我知道我迟到了,但我有今天同样的问题并解决它。由于这是首次在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

相关问题