我们有一个典型的IIS托管,c#wcf Web服务,并希望记录所有传入的请求。为此,我正在使用如下定义的消息记录检查器类。我在其上调用CreateBufferedCopy以获取BufferedMessage以将其传递给日志记录功能,并使其可以再次处理该服务。 由于某种原因,CreateBufferedCopy调用非常缓慢。 我用于测试的请求大小为aprox。 1MB,这一次通话耗时近3.5秒!为什么? 没有此日志记录功能,对我们的Web服务的调用花费了300毫秒, 对于相同的请求,包括接收请求,处理请求,调用另一个后端Web服务,处理其响应并返回我们的响应。 为每个请求添加3.5秒仅用于记录目的是绝对不可接受的。
我有以下课程:
public class MessageLoggingInspector : IDispatchMessageInspector
{
public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
{
var watch = new Stopwatch();
watch.Start();
var bufferedMessage = request.CreateBufferedCopy(int.MaxValue);
watch.Stop();
Debug.WriteLine("AfterReceiveRequest::CreateBufferedCopy: {0} elapsed.", watch.Elapsed);
request = bufferedMessage.CreateMessage();
LogMessage(bufferedMessage.CreateMessage(), "request");
return null;
}
private void LogMessage(Message message, string filenameAppendix)
{
// do some logging stuff
}
};
AfterReceiveRequest :: CreateBufferedCopy:00:00:03.4431423已过去。