登录ASP.NET&IIS7原始和压缩HTTP响应(Logging raw and compress

2019-06-25 13:56发布

沿线的这个问题,我想创建一个HTTP模块,将尽我们的请求和响应的一些自定义日志记录。 在这个问题最普遍的回答使用代码我有一个HTTP模块运行起来这的确做的工作:

class PortalTrafficModule : IHttpModule
{
    public void Dispose()
    {
        // Do Nothing
    }

    public void Init(HttpApplication context)
    {
        context.BeginRequest += new EventHandler(context_BeginRequest);
        context.EndRequest += new EventHandler(context_EndRequest);
    }

    private void context_BeginRequest(object sender, EventArgs e)
    {
        HttpContext context = ((HttpApplication)sender).Context;

        // Create and attach the OutputFilterStream to the Response and store it for later retrieval.
        OutputFilterStream filter = new OutputFilterStream(context.Response.Filter);
        context.Response.Filter = filter;
        context.Items.Add("OutputFilter", filter);

        // TODO: If required the request headers and content could be recorded here
    }

    private void context_EndRequest(object sender, EventArgs e)
    {
        HttpContext context = ((HttpApplication)sender).Context;
        OutputFilterStream filter = context.Items["OutputFilter"] as OutputFilterStream;

        if (filter != null)
        {
            // TODO: Log here - for now just debug.
            Debug.WriteLine("{0},{1},{2}",
                context.Response.Status,
                context.Request.Path,
                filter.ReadStream().Length);
        }
    }
}

(注意,在该代码中提到的OutputFilterStream类是被引用的问题 )。

然而,反应似乎缺少一些HTTP头,我在看到提琴手(如“日”),更重要的是,当我打开压缩,我记录不会被压缩,而我在小提琴手看到的是响应。

所以我的问题 -是有可能记录压缩的内容或者是这种情况发生在后续步骤中我的模块不能在勾?

为了记录在案,我也试着处理PreSendRequestContent事件和响应仍是压缩。

Answer 1:

嗨,虽然我不能回答你的问题直接我不得不事业做类似的事情在过去,发现下面的资源非常有帮助和启发。 最后,我设法acheive我需要的东西为原料的SOAP头通过配置web配置中的System.Diagnostics程序节点,创造流量的跟踪日志。 据我所知,您的需求可能会更细化的比,但是我相信这个资源可能依然帮助。

http://msdn.microsoft.com/en-us/library/ms731859

特别感兴趣的可以是该消息日志配置和观看消息记录来自上面的一个链接。



文章来源: Logging raw and compressed HTTP responses in ASP.NET & IIS7