3

次のテキストは、私が読んでいる本「MCTS Self-Paced Training Kit(Exam 70-515)Web Applications Development with ASP.NET 4」からのものです。これは、アプリケーションのライフサイクルの概要を示しています。

  1. ユーザーは最初にサイトのページをリクエストします。
  2. 要求は処理パイプラインにルーティングされ、ASP.NETランタイムに転送されます。
  3. ASP.NETランタイムは、ApplicationManagerクラスのインスタンスを作成します。このクラスインスタンスは、アプリケーションのリクエストを実行するために使用される.NETFrameworkドメインを表します。アプリケーションドメインは、グローバル変数を他のアプリケーションから分離し、必要に応じて各アプリケーションを個別にロードおよびアンロードできるようにします。
  4. アプリケーションドメインが作成された後、HostingEnvironmentクラスのインスタンスが作成されます。このクラスは、ディレクトリフォルダなど、ホスティング環境内のアイテムへのアクセスを提供します。
  5. ASP.NETは、要求の処理に使用されるコアオブジェクトのインスタンスを作成します。これには、HttpContext、HttpRequest、およびHttpResponseオブジェクトが含まれます。
  6. ASP.NETは、HttpApplicationクラスのインスタンスを作成します(またはインスタンスが再利用されます)。このクラスは、サイトのGlobal.asaxファイルの基本クラスでもあります。このクラスを使用して、アプリケーションの開始時または停止時に発生するイベントをトラップできます。ASP.NETはHttpApplicationのインスタンスを作成するときに、SessionStateModuleなどのアプリケーション用に構成されたモジュールも作成します。
  7. 最後に、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の下にある方法を誰かに説明してもらえますか?何でもありがたいです。

4

1 に答える 1

3

外には何も住んでいAppDomainないので、もちろん、そのHttpApplication中でインスタンス化する必要があります。

手順3〜6は、アプリケーションの存続期間中に1回だけ実行されます。ApplicationManagerインスタンスが作成されると、次のリクエストのために再度作成されることはありません。HostingEnvironmentとについても同じですHttpApplication。これは、Application-collectionに格納された値が、アプリケーションの存続期間中の以降のすべての要求を取得するためにそこに残ることを意味します。

AppDomainセッションごとやリクエストごとではなく、アプリケーションごとに1つあります。

于 2011-01-08T22:37:33.100 に答える