Protokollierung von unformatierten und komprimierten HTTP-Antworten in ASP.NET und IIS7

Nach dem Vorbild vondiese Frage Ich möchte ein HTTP-Modul erstellen, das einige benutzerdefinierte Protokollierungen von Anforderungen und Antworten für uns ausführt. Unter Verwendung des Codes in der beliebtesten Antwort auf diese Frage habe ich ein HttpModule eingerichtet, das tatsächlich funktioniert:

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);
        }
    }
}

(Beachten Sie, dass die OutputFilterStream-Klasse, auf die im Code verwiesen wird, in der referenzierten Klasse enthalten istFrage).

In den Antworten scheinen jedoch einige HTTP-Header zu fehlen, die ich in Fiddler sehe (wie "Date"), und was noch wichtiger ist: Wenn ich die Komprimierung einschalte, werden die Antworten, die ich aufzeichne, nicht komprimiert, wohingegen die in Fiddler angezeigten.

Also meine Frage - Ist es möglich, den komprimierten Inhalt zu protokollieren, oder geschieht dies in einem nachfolgenden Schritt, an den sich mein Modul nicht anschließen kann?

Für die Aufzeichnung habe ich auch versucht, das zu behandelnPreSendRequestContent Ereignis und die Antwort ist noch nicht komprimiert.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage