2009-04-13 7 views
4

私は自分の開発マシンでIIS 5を実行します。私はasp.net 3.5のWebサービスを実行しています。これは同じサーバー上で実行されている別のWebアプリケーションから呼び出しています。私のサービスがエラー500内部サーバーエラーを返すと、私はそれをトラブルシューティングしています。私の要求はSystem.Net.HttpWebRequesオブジェクトを介して送信されており、クライアントの観点からは有効です。IISに入ってくるHTTP要求をログに記録する方法

サーバーの観点からの未処理のHTTP要求を確認したいと思います。サービスはループバックで呼び出されているので、Wiresharkを使って見ることはできません。

IISロギングでは、リクエストヘッダーが表示されますが、投稿コンテンツは表示されません。

IISで生の着信HTTP要求がどのように表示されるかについてのご意見はありますか?

ありがとうございました

答えて

3

ロギングにHTTPModuleを追加すると思います。 Here's ASP.NETモジュールとハンドラに関するかなり良い記事:

こうして、ロギングを無効にしたい場合は、web.configファイルから削除/コメントアウトするだけです。

0

ベストプラクティスは、それぞれのWebアプリケーションを別のポートで実行し、次に、Fiddlerのようなものを使用して、監視するポートのプロキシを作成することです。これにより、特定のアプリケーションとの間のすべてのトラフィックを監視します。

5

Fiddlerを試しましたか? localhostではなくマシン名を使用してください。

+1

フィドラーブラウザから照会している場合は動作します。自分のアプリケーション内からのWebサービス呼び出しは機能しません。 –

+2

@ Mr Greieves、ちょっとした工夫が必要ですが、Webサービス呼び出しのプロキシ設定を手動で設定することができます。 –

0

次は、HTTP POST要求データを記録するために使用するカスタムHTTPモジュールのコードです。

using System; 
using System.Web; 

namespace MySolution.HttpModules 
{ 
    public class HttpPOSTLogger : IHttpModule 
    { 

     public void Dispose() 
     { 
     } 

     public void Init(HttpApplication context) 
     { 
      context.BeginRequest += new EventHandler(context_BeginRequest); 
     } 

     private void context_BeginRequest(object sender, EventArgs e) 
     { 
      if (sender != null && sender is HttpApplication) 
      { 
       var request = (sender as HttpApplication).Request; 
       var response = (sender as HttpApplication).Response; 

       if (request != null && response != null && request.HttpMethod.ToUpper() == "POST") 
       { 
        var body = HttpUtility.UrlDecode(request.Form.ToString()); 
        if (!string.IsNullOrWhiteSpace(body)) 
         response.AppendToLog(body); 
       } 
      } 
     } 

    } 
} 

あなたのアプリケーションのweb.configに忘れずに登録してください。

モジュールを適用する前に、IISログIISのクラシックモデル

<system.web> 
    <httpModules> 
     <add name="HttpPOSTLogger" type="MySolution.HttpModules.HttpPOSTLogger, MySolution.HttpModules"/> 
    </httpModules> 
</system.web> 

ためのIIS統合モデル

<system.webServer> 
    <modules> 
     <add name="HttpPOSTLogger" type="MySolution.HttpModules.HttpPOSTLogger, MySolution.HttpModules" /> 
    </modules> 
</system.webServer> 

使用system.webセクションのための

使用system.WebServerセクション:

::1, -, 10/31/2017, 10:53:20, W3SVC1, machine-name, ::1, 5, 681, 662, 200, 0, POST, /MySolution/MyService.svc/MyMethod, -, 

IISログ適用後:

::1, -, 10/31/2017, 10:53:20, W3SVC1, machine-name, ::1, 5, 681, 662, 200, 0, POST, /MySolution/MyService.svc/MyMethod, {"model":{"Platform":"Mobile","EntityID":"420003"}}, 

記事本文:

https://www.codeproject.com/Tips/1213108/HttpModule-for-logging-HTTP-POST-data-in-IIS-Log

関連する問題