2

たとえば、テキストを持つMSMQでメッセージを作成したいと思います

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

これは標準の XML です。これまでのところ、シリアライズ可能なクラスを作成しました

[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

あなたの質問はまったく明確ではありません。BinaryMessageFormatter を使用する限り、任意の種類のメッセージを MSMQ に送信できます。次に例を示します。

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

Body に渡す文字列の前に Message.Body にこれらの ASCII 文字が含まれている理由がわかりません。Body の代わりに BodyStream を直接入力し、それ自体を変換させます。

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

その場合、メッセージは単なる文字列であり、他には何もありません。

于 2013-08-28T12:58:20.587 に答える