5

.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ストリーム)はどのような用途ですか?

4

0 に答える 0