2009-06-06 22 views
21

カスタムクラスのコンストラクターがから派生した理由を説明できますか?アプリケーションの起動時にHttpApplicationが何度か呼び出されますか?HttpApplicationコンストラクターが何度も呼び出される理由

私のコードの構造は以下の通りです:
- Global.asaxの中に私のグローバルクラスは、CustomAppクラスから派生します。
- CustomAppクラスがから派生するのHttpApplicationクラス

グローバルクラスは、起動時に作成されますが、私は、コンストラクタにブレークポイントを配置するとき、それが複数回呼び出されます! アプリケーションクラスが1つしか作成されていないと思いましたか?

私は間違っていますか?

UPD:Webサーバが実際に同時に入ってくる複数の要求を処理するために、いくつかののHttpApplicationインスタンスを作成することができます。これは、子孫HttpApplicationのコンストラクタにブレークポイントを配置すると特に顕著になります。いくつかのリクエストがクライアント(httpコンテンツ、CSSファイルなど)から保留され、それぞれに対応するために、WebサーバーはHttpAppの新しいインスタンスを作成します。したがって、アプリケーションの初期化ロジックを記述する際には、これに注意してください。

+0

この動作を示すカットダウンコードスニペットを投稿することは可能ですか? –

答えて

15

私は、ASP.NETランタイムがアプリケーションドメインごとに複数のHttpApplicationを作成する可能性があると考えています。したがって、HttpApplication.InitとCtorは複数回呼び出されることがあります。

一度だけ実行される初期化コードを使用する場合は、アプリごとに1回呼び出されるApplication_Startイベントを使用する必要があります。

+0

HttpApplicationクラスをWebサイトの外に置く必要があるため、Applcation_Startのためにフックできるイベントがありますか? –

+1

Global.asax.csに 'Applcation_Start'メソッドを実装するだけで、自動的に配線され、開始時に呼び出されます。 http://msdn.microsoft.com/en-us/library/ms178473.aspx – mckamey

+0

'AuthenticateRequest'や' AcquireRequestState'のようなイベントは 'Application_Start()にイベントハンドラを登録すると起動しません) '。 'HttpApplication'のオーバーライドである' Init() 'に登録したいかもしれません。 – Manfred

6

投稿記事global.asax in ASP.NETをご覧ください。なぜ、HttpApplicationのインスタンスが複数あるのかを説明しています。基本的に2つのプールがあります:特別なものと正常なものがあります。標準プールには、要求によって使用されるHttpApplicationのインスタンスが含まれます(各要求には独自のHttpApplicationインスタンスがあります)。特殊プールには、アプリケーションレベルのイベント(Application_Start、Application_Errorなど)に使用されるHttpApplicationオブジェクトが含まれています。

+0

非常に興味深い、ありがとう! – Andy

関連する問題