开发者

IDispatchMessageInspector to log plain-text soap messages?

I've written a WCF IDispatchMessageInspector, so I can log incomming and outgoing messages. But I'm not sure how to get a nicely-formatted XML string to log.

My code looks something like this:

        public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
    开发者_JAVA百科{
        MessageBuffer buffer = request.CreateBufferedCopy(Int32.MaxValue);
        request = buffer.CreateMessage();
        Log("Received", request.ToString();
        return null;
    }

The result of this logging includes things like "ampersand lt;" and some sort of binary-encoded data.

How do I get something that looks like a standard soap XML document? I know this should be obvious, but I'm just too dense to figure it out.

Thanks.

Dan


Is there any specific reason you are not using the .Net build in tracing functionality with an XmlTextWriter output?

If no specific reason, have a look at http://msdn.microsoft.com/en-us/library/ms730064.aspx

Hope this helps,


Here is a working example

public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
{
    MessageBuffer buffer = request.CreateBufferedCopy(Int32.MaxValue);
    request = buffer.CreateMessage();

    XDocument doc;

    using (MemoryStream ms = new MemoryStream())
    {
        XmlWriter writer = XmlWriter.Create(ms);
        request.WriteMessage(writer);
        writer.Flush();
        ms.Position = 0;

        doc = XDocument.Load(ms);
    }

    if (SaveLog != null)
    {
        LogSaveFileEventArgs logEventArgs = new LogSaveFileEventArgs(doc, false);
        SaveLog(this, logEventArgs);
    }

    request = buffer.CreateMessage();

    //The return value can be any object that you want to use for correlation purposes;
    //it is returned to you as the correlationState parameter in the BeforeSendReply method.
    return null;
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜