簡體   English   中英

通過MSMQ發送的XML消息不包含編碼

[英]XML Message sent over MSMQ does not include encoding

我正在編寫一個使用MSMQ的應用程序,並且遇到了一個與XML聲明標記的編碼屬性有關的問題。

我正在構造如下消息:

string xmlmsg = reqText.Text;
XmlDocument xdoc = new XmlDocument();
xdoc.Load(new StringReader(xmlmsg));

xdoc.InsertBefore(xdoc.CreateXmlDeclaration("1.0", "UTF-8", "yes"), xdoc.DocumentElement);

Message _msg = new Message();

_msg.BodyStream = new MemoryStream(Encoding.ASCII.GetBytes(xdoc.OuterXml));
reqQueue.Send(_msg, "XML Request");

xdoc.OuterXml的控制台輸出顯示已包含編碼:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

但是,當我通過MSMQ發送消息時,編碼屬性將被刪除。

<?xml version="1.0" standalone="yes"?>

我在這里想念什么?

你錯過了音符的XmlDeclaration的文檔。

注意:如果將XmlDocument保存到TextWriter或XmlTextWriter,則將放棄此編碼值。 而是使用TextWriter或XmlTextWriter的編碼。 這確保了可以使用正確的編碼來讀回寫出的XML。

請嘗試以下這段代碼:

string xmlmsg = reqText.Text;
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(xmlmsg);

using (Message _msg = new Message())
using (var memStream = new MemoryStream())
using (var writer = XmlWriter.Create(memStream))
{
     writer.WriteStartDocument(standalone: true);
     xdoc.WriteTo(writer);
     writer.Flush();
     memStream.Seek(0, SeekOrigin.Begin);

     _msg.BodyStream = memStream;
     reqQueue.Send(_msg, "XML Request");
}

原來編碼是錯誤的。 這是實際起作用的簡化代碼:

        Message _msg = new Message
        {
            Formatter = new XmlMessageFormatter(),
            BodyStream = new MemoryStream(Encoding.Unicode.GetBytes(_xmlmsg))
        };
        reqQueue.Send(_msg, "XML Request");

代替ASCII,它必須是Unicode。

暫無
暫無

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

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