2009-09-08 23 views
10

Global.asax.csで拡張されたHttpApplicationクラスは、アプリケーションの存続期間中存在しますか?ASP.NET HttpApplicationライフサイクル

どの時点でインスタンスを作成/破棄できますか?

私はapplication_startを2度実行していますが、このプロセスではアプリケーションプールのリサイクルとリクエストの途中での処理が関係しているようです。私はそれをかなりデバッグしていないし、深く掘り下げる時間がありません。だから、上記の質問に関連して、以下は安全な解決策ですか? MSDNオンラインのページから

public class MvcApplication : System.Web.HttpApplication 
{ 
    public static object syncLock = new object(); 
    public static bool applicationBooted; 

    protected void Application_Start() 
    { 
     if(!applicationBooted) 
     lock (syncLock) 
     if(!applicationBooted) 
     { 
      // bootstrap here 
      applicationBooted = true; 
     } 
    } 
} 
+0

あなたの問題は何ですか?私は非常に似た問題があります。 –

+0

@Piotr私はこれが赤ちゃんだと思うが、スタートアップコードのどこかにスレッド問題があったと思う。しかし、覚えていない、申し訳ありません –

答えて

4

、初期化されている すべてのコアアプリケーションオブジェクトの後

、アプリケーション は のHttpApplicationクラスのインスタンスを作成することによって開始されます。 アプリケーションは、Global.asaxファイルがある場合、 ASP.NET代わり のHttpApplicationクラスから を導出し がアプリケーションを表すために派生クラスを使用しているのGlobal.asaxクラスのインスタンスを作成します。

ASP.NET Application Life Cycle Overview

+4

それはなぜそれが作成されているか、または2回呼び出されたイベントだけを説明しません。 –

6

あなたのログにイベントを2回見ている場合は、アプリケーションプールは、単一のワーカープロセスを起動するように設定されていることを確認してください。各ワーカープロセスは、HttpAppicationの独自のインスタンスを作成します。

+0

app_startを1度だけ実行しないでください。 1つ以上のワーカープロセスが必要なのですか? –

+1

> 1ワーカープロセスで実行するようにアプリケーションプールを構成すると、Webガーデンモードで実行されています。各プロセスは他のプロセスから分離され、パイプラインの独自のインスタンスを実行します。 –

+0

これは同じIISサイトに対して多くのw3wp.exeを取得することを意味しますか? –

関連する問題