相当于存储在数据库中的Fiddler SOAP请求/响应



我为其他服务编写了很多WCF服务。我以前在让Fiddler记录SOAP消息方面遇到过麻烦,但现在我可以这样做了。但是我的老板想要一个完全没有Fiddler的东西,在那里我可以把SOAP消息输出,把传入的消息记录到数据库中。我已经看了很多WCF日志记录和诊断,并用数据库源监听器扩展了它,但我找不到数据库源监听器的实现。

我不认为这是他想要的。他希望将Fiddler的SOAP请求/响应显示写入数据库。有人能帮我吗?

您有两种可能性:

  1. 编写自定义WCF跟踪侦听器,调用数据库过程来存储日志数据:

    public class AsyncMSMQTraceListener : TraceListener
    {
        public override void TraceData(TraceEventCache eventCache, string source,
                                       TraceEventType eventType, int id, object data)
        {
           // eventType like for example TraceEventType.Information
           var message = data.ToString();
           // Here call datbase save log with message              
        }
    
        public override void Write(string message)
        {
        }
        public override void WriteLine(string message)
        {
        }
    }
    

    但通过这种方式,您将获得跟踪消息,其中请求/响应只是其中的一部分

  2. 编写自定义消息检查器类:

    public class ConsoleOutputMessageInspector : IDispatchMessageInspector
    {
        public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
        {
            MessageBuffer buffer = request.CreateBufferedCopy(Int32.MaxValue);
            request = buffer.CreateMessage();
            // Here you can use buffer.CreateMessage().ToString()
            return null;
        }
        public void BeforeSendReply(ref Message reply, object correlationState)
        {
            MessageBuffer buffer = reply.CreateBufferedCopy(Int32.MaxValue);
            reply = buffer.CreateMessage();
            // here you can use buffer.CreateMessage().ToString()
        }
    }
    

注意 :无论您选择哪种方法,我都建议对数据库进行某种异步调用,以避免阻塞正常的服务流。

最新更新