2011-01-08 9 views
3

次のテキストは、私が読んでいる 'MCTS Self-Pacedトレーニングキット(Exam 70-515)のASPからのWebアプリケーション開発です.NET 4" 。これは、アプリケーションライフサイクルのランダウンを与える。ASP.NETアプリケーションレベル対セッションレベルとGlobal.asax ...混乱

  1. ユーザーが最初にサイト内のページを要求する。
  2. 要求を転送し、処理パイプラインに送られます
  3. ASP.NETランタイムは、ApplicationManagerクラスのインスタンスを作成します。このクラスインスタンスは、 eアプリケーションの要求を実行するために使用される.NET Frameworkドメイン。アプリケーションドメインは、グローバル変数を他のアプリケーションから隔離し、必要に応じて、各アプリケーションを個別にロードおよびアンロードすることを許可します。
  4. アプリケーションドメインが作成されると、HostingEnvironmentクラスのインスタンスが作成されます。このクラスは、ディレクトリフォルダーなど、ホスティング環境内のアイテムへのアクセスを提供します。
  5. ASP.NETは、要求を処理するために使用されるコアオブジェクトのインスタンスを作成します。これには、HttpContext、HttpRequest、およびHttpResponseオブジェクトが含まれます。
  6. ASP.NETは、HttpApplicationクラスのインスタンスを作成します(またはインスタンスが再利用されます)。このクラスは、サイトのGlobal.asaxファイルの基本クラスです。このクラスを使用すると、アプリケーションの起動時または停止時に発生するイベントをトラップできます。 ASP.NETがHttpApplicationのインスタンスを作成すると、SessionStateModuleなど、アプリケーション用に構成されたモジュールも作成されます。
  7. 最後に、ASP.NETプロセスは、HttpApplicationピードラインを通じて要求を処理します。このパイプラインには、要求の検証、URLのマッピング、キャッシュへのアクセスなどの一連のイベントも含まれています。アプリケーションが起動しない場合

    <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> 
    

ブックは、Global.asaxファイルの使用例を実証しましたか?セッションとアプリケーションレベルの違いは何ですか?私はむしろこれがどのように管理されているのか混乱しています。私は、アプリケーションレベルのクラスがAppDomainオブジェクトの「上に座って」いると思っていました.AppDomainには、そのユーザーのセッションに固有の情報が含まれていました。誰かがIISでApplicaitonレベルのクラスを管理する方法と、HttpApplicationクラスがAppDomainの下にどのように置かれているか説明してください。何でも感謝します。

+0

関連:http://stackoverflow.com/questions/951137/asp-net-session-life-time-issue and http://stackoverflow.com/questions/2998136/advantages-and-disadvantages-of-using -application-variables-in-web-applications –

答えて

3

AppDomainの外には何もありませんので、もちろんHttpApplicationは内部でインスタンス化する必要があります。

ステップ3〜6は、アプリケーションの有効期間中に一度だけ発生します。 ApplicationManagerインスタンスが作成されると、次の要求のために再度作成されることはありません。同じはHostingEnvironmentHttpApplicationです。つまり、アプリケーションコレクションに格納された値は、アプリケーションの存続期間中にすべての後続の要求を取得するためにそこに残ります。

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

+0

***アプリケーションごとに1つのAppDomainがありますが、セッションごとまたは要求ごとにはありません。***アプリケーションごとには、IISのWebサイト単位を意味しますか?私は1つのWebサイトのすべての要求を管理しているAppDomainが1つだけであるかどうかを知る必要があります – Zviadi

+0

は、Webサイトのサブフォルダをアプリケーションとして構成でき、そのフォルダに移動する要求は* HttpApplication *はそのフォルダに固有のものです。しかし、一般的にはい、1つのWebサイトが1つのアプリケーションです。 –