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