CreateBufferedCopy性能极差

时间:2016-09-21 14:54:24

标签: c# web-services wcf

我们有一个典型的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已过去。

0 个答案:

没有答案