2

我想在 MSMQ 中发送消息,其中包含例如文本

<order><data id="5" color="blue"/></order>

这是标准的 XML。到目前为止,我已经制作了 Serializable 类

[Serializable]
public class order
string id
string color

我正在使用 BinaryFormatter。当我检查 message.BodyStream 时,有一些不应该存在的字符( 00,01,FF ),然后我无法毫无错误地收到此消息。

这个任务看起来很简单,放文字

<order><data id="5" color="blue"/></order> 

进入 msmq。

挖掘整个重要代码:

public static void Send()
    {
        using (message = new Message())
        {
            request req = new request("1", "blue");

                message.Recoverable = true;
                message.Body = req.ToString();
                message.Formatter = new BinaryMessageFormatter();
                using (msmq = new MessageQueue(@".\Private$\testrfid"))
                {
                    msmq.Formatter = new BinaryMessageFormatter();
                    msmq.Send(message, MessageQueueTransactionType.None);
                }
        }
    }

[Serializable]
public class request
{
    private readonly string _order;
    private readonly string _color;

    public request(string order, string color)
    {
        _order = order;
        _color = color;
    }
    public request()
    { }
    public string Order
    {
        get { return _order; }
    }
    public string Color
    {
        get { return _color; }
    }

    public override string ToString()
    {
        return string.Format(@"<request> <job order = ""{0}"" color = ""{1}"" /> </request>",_order,_color);
    }
}
4

3 回答 3

1

您的问题根本不是很清楚;您可以向 MSMQ 发送您喜欢的任何类型的消息,只要您使用 BinaryMessageFormatter。这是一个例子:

string error = "Some error message I want to log";

using (MessageQueue MQ = new MessageQueue(@".\Private$\Your.Queue.Name"))
{
    BinaryMessageFormatter formatter = new BinaryMessageFormatter();
    System.Messaging.Message mqMessage = new System.Messaging.Message(error, formatter);
    MQ.Send(mqMessage, MessageQueueTransactionType.Single);
    MQ.Close();
}
于 2013-08-23T13:14:35.093 回答
0

我还没有找到为什么 Message.Body 在我传递给 Body 的字符串之前包含这些 ascii 字符的原因。我只是直接填充 BodyStream 而不是 Body 并让它自己转换:

Message.BodyStream = new MemoryStream(Encoding.ASCII.GetBytes(string i want to put as Body))

那么消息只是字符串,没有其他内容。

于 2013-08-28T12:58:20.587 回答
-1

您不需要可序列化类将字符串发送到消息队列。

由于您使用的是 BinaryMessageFormatter,因此您必须首先使用文本编码器将字符串转换为字节数组,例如

message.Body = new UTF8Encoding().GetBytes(req.ToString());

我只是以 UTF8 为例,你可以使用任何你喜欢的编码。

然后,当您从队列中读取消息时,请记住使用相同的编码来获取您的字符串,例如

string myString = new UTF8Encoding().GetString(message.Body);

希望这可以帮助

于 2013-10-25T15:20:48.167 回答