3

既存のWebサービスの使用をログに記録するための単純なHttpModuleを作成しました。単一のクラスを含むdllがあります

public class TrackingModule : System.Web.IHttpModule
{
    public TrackingModule(){}

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

    public void Dispose()
    {

    }

    private void context_BeginRequest(object sender, EventArgs e)
    {
        try
        {
            Microsoft.ApplicationBlocks.ExceptionManagement.ExceptionManager.Publish( new Exception("Log attept") );
            HttpApplication app = (HttpApplication)sender;
            string method = app.Request.RawUrl;
            SaveUseToDatabase( app.Request.UserHostAddress, method );
        }
        catch( Exception ex )
        {
            try
            {
                Microsoft.ApplicationBlocks.ExceptionManagement.ExceptionManager.Publish( ex );
            }
            catch{}
        }
    }
}

dllをコンパイルした後、それをWebサービスのbinフォルダーに追加し、webserviceのweb.configに次のように追加します。

<system.web>
    <httpModules>
       <add name="TrackingModule" type="WebserviceTrackingModule.TrackingModule, WebserviceTrackingModule"/>

これは私のコンピューターでは正常に機能しますが、本番サーバーにコピーしても何も起こりません。データベースに新しいエントリはなく、ExceptionManagerによってログに記録されたエントリもありません。まるでそこにないかのように。

何が欠けている可能性がありますか?

編集:別のテストを実行した後、独自のトップレベルの仮想ディレクトリを持つWebサービスに追加したときに機能することを追加できます。別の仮想ディレクトリのサブフォルダである仮想ディレクトリに存在するWebサービスでは機能しません。

HttpModules設定がサブディレクトリに継承されていることは知っていますが、親ディレクトリの存在が邪魔になっているようです。

4

4 に答える 4

3

私はより良い解決策を見つけたと信じています。Web 構成ではなく、実行時にモジュールをアタッチします。詳細については、 Rick Strahl のブログ投稿をご覧ください。

于 2009-02-27T15:04:01.993 に答える
1

OK、私は自分の質問に答えています。

サブディレクトリがアプリケーションとして構成されている場合でも、サブディレクトリの web.config で <httpModules> を定義すると機能しません。これまでに見つけた唯一の解決策は、ルート アプリケーション (親ディレクトリ) の web.config の <location> タグ内でそれらを定義することです。

私はそれが気に入りません :(

于 2008-12-19T09:32:33.447 に答える
0

これは機能しますか?

<add name="TrackingModule" type="WebserviceTrackingModule.TrackingModule" />

また、各リクエストに対して context_BeginRequest メソッドが確実に呼び出されていますか?

于 2008-12-18T15:15:07.483 に答える