我为其他服务编写了很多WCF服务。我以前在让Fiddler记录SOAP消息方面遇到过麻烦,但现在我可以这样做了。但是我的老板想要一个完全没有Fiddler的东西,在那里我可以把SOAP消息输出,把传入的消息记录到数据库中。我已经看了很多WCF日志记录和诊断,并用数据库源监听器扩展了它,但我找不到数据库源监听器的实现。
我不认为这是他想要的。他希望将Fiddler的SOAP请求/响应显示写入数据库。有人能帮我吗?
您有两种可能性:
-
编写自定义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) { } }
但通过这种方式,您将获得跟踪消息,其中请求/响应只是其中的一部分
-
编写自定义消息检查器类:
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() } }
注意 :无论您选择哪种方法,我都建议对数据库进行某种异步调用,以避免阻塞正常的服务流。