在ASP.NET中记录原始和压缩的HTTP响应& IIS7

时间:2012-06-18 13:59:23

标签: asp.net logging iis-7 compression ihttpmodule

沿着this question的路线,我想创建一个HttpModule,它将为我们做一些自定义的请求和响应记录。在这个问题的最受欢迎的答案中使用代码我已经启动并运行了HttpModule,它确实有效:

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类位于引用的question中)。

然而,响应似乎缺少我在Fiddler中看到的一些HTTP头(比如“Date”),更重要的是,当我打开压缩时,我正在记录的响应没有被压缩,而我在Fiddler中看到的是

所以我的问题 - 是否可以记录压缩内容,或者这是在我的模块无法挂钩的后续步骤中发生的?

为了记录,我还尝试处理 PreSendRequestContent 事件,响应仍未解压缩。

1 个答案:

答案 0 :(得分:0)

嗨虽然我不能直接回答你的问题,但我有理由在过去做类似的事情并且发现以下资源非常有帮助和启发。最后,我通过在Web配置中配置System.Diagnostics节点并创建流量跟踪日志,设法实现了原始soap头所需的功能。我知道您的需求可能比那些更精细,但我相信这个资源可能仍然有用。

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

特别感兴趣的可能是上面的消息日志配置和查看消息日志链接。