3

この質問に沿って、リクエストとレスポンスのカスタム ロギングを行う 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 クラスは、参照されている質問にあることに注意してください)。

ただし、応答には、Fiddler で表示される一部の HTTP ヘッダー (「Date」など) が欠落しているように見えます。さらに重要なことに、圧縮をオンにすると、ログに記録している応答は圧縮されませんが、Fiddler では圧縮されません。

だから私の質問- 圧縮されたコンテンツをログに記録することは可能ですか、それとも私のモジュールがフックできない次のステップでこれが起こっていますか?

念のため、 PreSendRequestContentイベントの処理も試みましたが、応答はまだ圧縮されていません。

4

1 に答える 1

0

こんにちは、私はあなたの質問に直接答えることができませんが、私は過去に同様のことをしたことがあります. 最終的に、Web 構成内で System.Diagnostics ノードを構成し、トラフィックのトレース ログを作成することで、未加工の SOAP ヘッダーに必要なものを達成することができました。あなたのニーズがそれよりも細かいかもしれないことは理解していますが、このリソースはまだ役立つと思います.

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

特に興味深いのは、上記のメッセージ ログの構成とメッセージ ログの表示のリンクです。

于 2012-08-01T22:23:42.077 に答える