私は(ASP.NET MVCを使用して)Webサービスを作成していますが、サポートの目的で、要求と応答を生のオンザワイヤー形式(つまり、HTTPを含む)にできるだけ近い形でログに記録できるようにしたいと考えています。メソッド、パス、すべてのヘッダー、および本文)をデータベースに追加します。
私がよくわからないのは、このデータを最小限の「混乱した」方法で取得する方法です。オブジェクトのすべてのプロパティを調べて、それらから文字列を作成することで(そして同様に応答についても)、要求がどのように見えるかを再構成できますHttpRequest
が、実際の要求/応答データを取得したいと思います。有線で送信されます。
フィルタやモジュールなどの傍受メカニズムを使用できてうれしいです。ソリューションはIIS7に固有のものにすることができます。ただし、マネージコードのみで保持したいと思います。
何かお勧めはありますか?
編集:リクエストをディスクに保存できるメソッドがあることに注意しHttpRequest
てくださいが、SaveAs
これは、パブリックにアクセスできない内部ヘルパーメソッドのロードを使用して内部状態からリクエストを再構築します(これがユーザー提供の保存を許可しない理由はかなりあります)わからないストリーム)。そのため、オブジェクトから要求/応答テキストを再構築するために最善を尽くさなければならないように見え始めています...うめき声。
編集2:メソッド、パス、ヘッダーなどを含むリクエスト全体を言ったことに注意してください。現在の応答は、この情報を含まないボディストリームのみを調べます。
編集3:誰もこのあたりの質問を読んでいませんか?これまでのところ5つの答えがありますが、生のオンザワイヤ要求全体を取得する方法を示唆するものは1つもありません。はい、リクエストオブジェクトから出力ストリーム、ヘッダー、URLなどすべてをキャプチャできることはわかっています。私はすでに質問でそれを言った、見てください:
HttpRequestオブジェクトのすべてのプロパティを調べて、それらから文字列を作成することで(そして同様に応答についても)、要求がどのように見えるかを再構成できますが、実際の要求/応答データを取得したいと思います。それはネットワーク上で送信されます。
完全な生データ(ヘッダー、URL、httpメソッドなどを含む)を単純に取得できないことがわかっている場合は、それを知っておくと便利です。同様に、私が尋ねたように、再構築せずにすべてをraw形式(はい、ヘッダー、URL、httpメソッドなどを含めることを意味します)で取得する方法を知っている場合、それは非常に便利です。HttpRequest
しかし、 /HttpResponse
オブジェクトから再構築できると言っても役に立ちません。そんなこと知ってる。私はすでにそれを言いました。
注:これは悪い考えである、またはスケーラビリティを制限するなどと誰かが言う前に、分散環境でスロットリング、順次配信、およびアンチリプレイメカニズムも実装するため、とにかくデータベースロギングが必要です。私はこれが良い考えであるかどうかの議論を探していません、私はそれがどのように行われることができるかを探しています。