次のテキストは、私が読んでいる本「MCTS Self-Paced Training Kit(Exam 70-515)Web Applications Development with ASP.NET 4」からのものです。これは、アプリケーションのライフサイクルの概要を示しています。
- ユーザーは最初にサイトのページをリクエストします。
- 要求は処理パイプラインにルーティングされ、ASP.NETランタイムに転送されます。
- ASP.NETランタイムは、ApplicationManagerクラスのインスタンスを作成します。このクラスインスタンスは、アプリケーションのリクエストを実行するために使用される.NETFrameworkドメインを表します。アプリケーションドメインは、グローバル変数を他のアプリケーションから分離し、必要に応じて各アプリケーションを個別にロードおよびアンロードできるようにします。
- アプリケーションドメインが作成された後、HostingEnvironmentクラスのインスタンスが作成されます。このクラスは、ディレクトリフォルダなど、ホスティング環境内のアイテムへのアクセスを提供します。
- ASP.NETは、要求の処理に使用されるコアオブジェクトのインスタンスを作成します。これには、HttpContext、HttpRequest、およびHttpResponseオブジェクトが含まれます。
- ASP.NETは、HttpApplicationクラスのインスタンスを作成します(またはインスタンスが再利用されます)。このクラスは、サイトのGlobal.asaxファイルの基本クラスでもあります。このクラスを使用して、アプリケーションの開始時または停止時に発生するイベントをトラップできます。ASP.NETはHttpApplicationのインスタンスを作成するときに、SessionStateModuleなどのアプリケーション用に構成されたモジュールも作成します。
- 最後に、ASP.NETはHttpApplicationパイプラインを介して要求を処理します。このパイプラインには、リクエストの検証、URLのマッピング、キャッシュへのアクセスなどの一連のイベントも含まれています。
次に、この本はGlobal.asaxファイルの使用例を示しました。
<script runat="server">
void Application_Start(object sender, EventArgs e)
{
Application["UsersOnline"] = 0;
}
void Session_Start(object sender, EventArgs e)
{
Application.Lock();
Application["UsersOnline"] = (int)Application["UsersOnline"] + 1;
Application.UnLock();
}
void Session_End(object sender, EventArgs e)
{
Application.Lock();
Application["UsersOnline"] = (int)Application["UsersOnline"] - 1;
Application.UnLock();
}
</script>
アプリケーションはいつ開始されますか?セッションレベルとアプリケーションレベルの違いは何ですか?私はこれがどのように管理されているかについてかなり混乱しています。アプリケーションレベルのクラスはAppDomainオブジェクトの「上にある」と思い、AppDomainにはそのユーザーのそのセッションに固有の情報が含まれていました。IISがアプリケーションレベルのクラスを管理する方法と、HttpApplicationクラスがAppDomainの下にある方法を誰かに説明してもらえますか?何でもありがたいです。