.NET System.ServiceModel.Channels.Message オブジェクトを XmlDocument に変換する方法を見つけようとして、次のようにできると思いました。
Message message = Message.CreateMessage(messageVersion, "SOAPAction");
using(var messageBuffer = message.CreateBufferedCopy(int.MaxValue))
{
var stream = new MemoryStream();
using(var xmlWriter = XmlWriter.Create(stream))
{
var xmlDocument = new XmlDocument();
messageBuffer.WriteMessage(stream);
stream.Flush();
stream.Position = 0;
xmlDocument.Load(stream);
stream.Close();
Debug.Writeline(xmlDocument.OuterXml);
}
}
ただし、これにより xmlDocument.Load(stream) でエラーが発生します。
"Data at the root level is invalid. Line 1, position 1."
次のように、Message オブジェクトの WriteMessage を XmlWriter オブジェクトと組み合わせて使用する必要があることに気付きました。
Message message = Message.CreateMessage(messageVersion, "SOAPAction");
using(var messageBuffer = message.CreateBufferedCopy(int.MaxValue))
{
var stream = new MemoryStream();
using(var xmlWriter = XmlWriter.Create(stream))
{
var xmlDocument = new XmlDocument();
messageBuffer.CreateMessage().WriteMessage(xmlWriter);
xmlWriter.Flush();
stream.Flush();
stream.Position = 0;
xmlDocument.Load(stream);
xmlWriter.Close();
stream.Close();
Debug.WriteLine(xmlDocument.OuterXml);
}
}
私はいくつかの基本的な点が欠けていると確信していますが、これは私の質問につながります.MessageBufferオブジェクトのWriteMessage(Streamストリーム)はどのような用途ですか?