2014-09-02 54 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

相關問題