gpt4 book ai didi

c# - 向 MSMQ 发送序列化数据时抛出 InvalidCastException

转载 作者:行者123 更新时间:2023-11-30 19:39:56 25 4
gpt4 key购买 nike

我尝试将序列化数据发送到 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”而发生的,但我不确定这方面。

最佳答案

我知道我迟到了,但我今天遇到了同样的问题并解决了。由于它是 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 实例。

这对我有用。

关于c# - 向 MSMQ 发送序列化数据时抛出 InvalidCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25616885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com