4

Web アプリケーションが開始された後、Web リクエスト中に、あるアクションを 1 回または 2 回だけ実行したいとします。

public class WebApp : HttpApplication
{
    public override void Init()
    {
        base.Init();

        this.BeginRequest += new EventHandler(this.OnFirstBeginRequest);
    }

    private void OnFirstBeginRequest(object sender, EventArgs e)
    {
        // do some action and if everything is OK, unbind this handler,
        // because we need it executed only once at the first web request
        this.BeginRequest -= new EventHandler(this.OnFirstBeginRequest);
    }
}

次の例外がスローされます。

イベント ハンドラーは、IHttpModule の初期化中にのみ HttpApplication イベントにバインドできます。

4

1 に答える 1

2

インスタンスでイベント ハンドラーを使用して、アプリケーションへの最初の要求でコードを実行するのは意味がありませんHttpApplication。新しいインスタンスが作成されるたびに、HttpApplicationそれらのイベントが再バインドされ、イベント ハンドラーのコードが再度実行されるためです。

複数HttpApplicationのインスタンスが ASP.NET ワーカー プロセスによって作成されます。HttpApplicationこれらはパフォーマンスの目的でプールされますが、Web アプリに対するサービス要求のインスタンスが複数あることは間違いありません。

この件に関する非常に優れた記事を次に示します

于 2011-04-29T21:19:29.033 に答える