Регистрация необработанных и сжатых HTTP-ответов в ASP.NET и IIS7

В строках этот вопрос Я хочу создать 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.

Однако в ответах, кажется, отсутствуют некоторые заголовки HTTP, которые я вижу в Fiddler (например, "Дата" ), и что более важно, когда я включаю сжатие, ответы, которые я регистрирую, не сжаты, а то, что я вижу в Fiddler есть.

Итак, мой вопрос - можно ли записывать сжатый контент или это происходит на следующем этапе, к которому мой модуль не может подключиться?

Для записи я также попытался обработать событие PreSendRequestContent, и ответ по-прежнему несжатый.

Ответ 1

Привет, хотя я не могу ответить на ваши вопросы напрямую, у меня была причина делать подобные вещи в прошлом, и нашел следующий ресурс чрезвычайно полезным и просвещенным. В итоге мне удалось добиться того, что мне нужно для необработанных заголовков мыла, настроив System.Diagnostics node в веб-конфигурации и создав журнал трассировки трафика. Я понимаю, что ваши потребности могут быть более узкими, чем это, но я считаю, что этот ресурс все же может помочь.

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

Особый интерес могут представлять конфигурации журнала сообщений и просмотр журналов журналов сообщений из приведенного выше.