簡體   English   中英

更改MSMQ正文的格式

[英]Change format for MSMQ body

我有一個要以XML格式存儲在MSMQ隊列中的對象。 我希望它出現在隊列主體中是這樣的:

<?xml version="1.0"?>
<Object>
    <Text>Hello World!</Text>
    <Number>5</Number>
</Object>

但是,當我存儲對象時,我會在主體中看到不同的結果:

3C 3F 78 6D 6C 20 76 65 <?xml ve
72 73 69 6F 6E 3D 22 31 rsion="1
2E 30 22 3F 3E 0D 0A 3C .0"?>..<
4F 62 6A 65 63 74 3E 0D Object>.
0A 09 3C 54 65 78 74 3E .<Text>H
48 65 6C 6C 6F 20 57 6F ello Wor
72 6C 64 21 3C 2F 54 65 ld!</tex
78 74 3E 0D 0A 09 3C 4E t>..<Num 
75 6D 62 65 72 3E 35 3C ber>5</N
2F 4E 75 6D 62 65 72 3E umber>..
0D 0A 3C 2F 4F 62 6A 65 </Object
63 74 3E                >

我不確定這里使用的實際格式是什么,所以我無法鍛煉如何更改它。 我嘗試添加messageQueue.Formatter = new BinaryMessageFormatter(); messageQueue.Formatter = new XmlMessageFormatter(); 到MessageQueue對象,但得到完全相同的結果。

我發送對象的代碼是:

// This part of the code of creating the TestObject isn't what I'm using in development, 
// this is just for showing you that I'm using an object.
TestObject item = new TestObject();
item.Text = "Hello World!";
item.Number = 5;

MessageQueue messageQueue;
Message message;

messageQueue = new MessageQueue(@".\Private$\myqueue");
message = new Message(item);

messageQueue.Send(message);

如何更改代碼以確保其以XML格式發送和存儲?

任何幫助,將不勝感激。

如果右鍵單擊消息上的計算機管理/消息隊列/專用隊列/ myqueue /隊列消息 ”中的屬性,然后選擇“正文”選項卡,則上面的十六進制轉儲幾乎看起來與您得到的結果相同。 當您執行此操作時,查看者可以向您展示字符串轉儲或十六進制轉儲。 通常,較大的尺寸會為您帶來十六進制轉儲。

要將對象序列化為XML,只需將隊列的MessageQueue.Formatter或消息的Message.Formatter (僅用於特定消息)設置為XmlMessageFormatter ,但要包含所需的類型。 然后,該對象將成為序列化的XML消息。 下面包括附帶一些附加代碼的代碼。

// This part of the code of creating the TestObject isn't what I'm using in development, 
// this is just for showing you that I'm using an object.
TestObject item = new TestObject();
item.Text = "Hello World!";
item.Number = 5;

MessageQueue messageQueue;
Message message;
XmlMessageFormatter format = new XmlMessageFormatter(
    new Type[] {
        typeof(string),
        typeof(TestObject)}
);

messageQueue = new MessageQueue(@".\Private$\myqueue");
message = new Message(item);
message.Formatter = format;

messageQueue.Send(message);

// ...

message = messageQueue.Receive();
Type messageType = message.Body.GetType();
if (messageType == typeof(string))
{
    string newString = (string)message.Body;
}
else if (messageType == typeof(TestObject))
{
    TestObject receiveItem = (TestObject)message.Body;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM