ASP.NETアプリケーションレベル対セッションレベルとグローバル。アサックス…混乱

StackOverflow https://stackoverflow.com/questions/4635535

質問

次のテキストは、私が読んでいる本からのものです。「MCTSセルフペーストレーニングキット(試験70-515)Webアプリケーション開発をASP.NET 4」としています。アプリケーションのライフサイクルの概要を提供します。

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

役に立ちましたか?

解決

外には何も住んでいません AppDomain もちろん HttpApplication 1つ内にインスタンス化する必要があります。

ステップ3〜6は、アプリケーションの生涯でのみ1回発生します。 ans ApplicationManager インスタンスが作成されており、次のリクエストのために再び作成されません。同じことがあります HostingEnvironmentHttpApplication. 。これは、アプリケーションの収集に保存されている値が、アプリケーションの寿命の間にすべての後の要求に対応するためにそこに残ることを意味します。

ここに一つ AppDomain アプリケーションごと、セッションごとまたはリクエストごとではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top