我为其他服务编写了很多WCF服务。我在让Fiddler记录SOAP消息之前遇到了麻烦,但现在我已经开始工作了。但是我的老板想要一些没有Fiddler的东西,我可以把SOAP消息输出,然后登录到数据库。我已经看了很多WCF日志记录和诊断,并使用数据库源监听器扩展它,但我找不到要使用的数据库源监听器的实现。
我认为这不是他想要的。他希望将Fiddler的SOAP请求/响应显示写入数据库。有人可以帮帮我吗?
答案 0 :(得分:0)
您有两种可能性:
编写自定义WCF Trace Listener,调用数据库过程来存储日志记录数据:
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)
{
}
}
但是通过这种方式,您将获得跟踪消息,其中请求/响应只是其中的一部分。
编写自定义Message Inspector类:
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()
}
}
注意 :无论您选择哪种方法,我都建议对数据库进行某种异步调用,以阻止正常的服务流。