[英]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.