2013-05-21 16 views
8

私はちょうどAzureの技術的な詳細を学ぶために足を濡らし始めているので、これが愚かな質問であれば謝ります。webrole onStart()イベントとApplication_Start()global.asaxイベントの違いは何ですか?

Visual Studioでクラウドサービスプロジェクトを作成し、mvcアプリケーション用のwebroleを追加すると、mvcアプリケーション内に "WebRole.cs"ファイルが表示されます。 ただし、MVCアプリケーションを開始点として開始し、後でプロジェクトを右クリックして「Windows Azureクラウドサービスプロジェクトを追加」を選択すると、WebRole.csは作成されません。

私はWebRoleの開始イベントで何が起こるのでしょうか? Global.asaxファイルのApplication_Start()イベント?

もしそうなら、Global.asaxのApplication_Start()とwebroleのonStart()メソッドの違いは何ですか?どうなるか、だから、WebRoleのONSTARTイベントはGlobal.asaxの中のApplication_Start()の前に発生した場合かどう What starts first Application_Start or WebRole's OnStart?

私は部分的な説明を提供しています以下の記事を、見つけました私は後でAzureのためにアプリケーションを有効にしたプロジェクトのonStart()イベントでいくつかのコードを実行したいですか?

答えて

13

RoleEntryPointウェブ役割will run just fineを拡張するにはクラスはありません場合は、単に余分なコードがOnStart()Run()OnStop()の代わりに実行されません。

Application_Start()は完全にAzureとは無関係であり、Azureランタイムによって完全に無視されます。これはASP.NET配線の一部です。 Application_Start()を簡単に例外をスローすることができます。これにより、Webロールの開始を妨げることはありません。すべてのHTTPリクエストが失敗します。

SDK 1.3から、デフォルトモードは、RoleEntryPoint子孫を含むWebロールペイロードが1つのプロセス(WaIISHost.exe)で実行され、ASP.NETコードが別のプロセスで実行される「IISモード」です。 RoleEntryPointのプロセスは、最初にAzureランタイムによって起動され、OnStart()を実行し、Run()に無限ループを入力すると、そのインスタンスはHTTP要求用に開かれます。 IIS 7.5を使用していて「自動起動」を有効にしている場合は、先にApplication_Start()が実行されている可能性があります。それ以外の場合は、最初の要求が来るまでApplication_Start()が実行されません。

重要な点は、コードを実行するプロセスが2つあり、それぞれが独自のライフタイムを持ち、アプリケーションの設計方法に制限があることです。

RoleEntryPoint子孫クラスは任意の名前を持ち、任意の名前空間に属し、Webロールのペイロードとして選択されたプロジェクト内の.csファイルに配置されます。これはASP.NETプロジェクトになります。これらの条件下では、RoleEntryPoint子孫はAzureランタイムによって配置され、そのメソッドはロールインスタンスのライフタイムの一部として実行されます。

0

私はここでの質問を誤解している可能性がありますのでお知らせください。

確かに通常のASP.NETプロジェクトから始めて、後でそれをWindows Azure Webロールで実行するように変換できます。 WebRole.csは技術的には必須ではありません。ロールはロールなしで開始する必要があります。しかし、ロールインスタンスの起動プロセスの一部としてロジックを挿入したい場合は、RoleEntryPointを継承したWebRoleクラスを追加し、OnStart()をオーバーライドすることができます。

一般的に、Web RoleのOnStart() - よりプラットフォーム固有のconfig/bootstrapに設定/ブートストラップロジックを入れる傾向があります。

+1

これは私が考えたものです。 クラスは "WebRole.cs"と呼ばれ、プロジェクトのルートに存在する必要がありますか、それはRoleEntryPointを継承していれば何でも呼び出せますか? 正常に動作するには、通常のwebroleのWebRole.csファイルの規約に従わなければならないと思います。 – Steviebob

0

RoleEntryPointクラスから継承された、自分の役割に対して単一のエントリポイントクラスを持つことができます。通常、workerrole.csまたはwebrole.csはこれから継承されます。

RoleEntryPointから継承されていれば、任意のクラス名を付けることができます。

あなたの役割が準備完了になると、このクラスのOnStartイベントが発生します。 アプリケーションの起動前に、ここで初期化ロジックを記述することができます。 IoCコンテナの初期化、Windows Azureの診断設定などが可能です。

Application_Startイベントは、初めてWebサイトにアクセスしたときに発生します。ロールはすでにレディ状態です。

+0

RoleEntryPointにIoCコンテナを設定したくないのではないでしょうか?これはあなたのサイトに別のアプリドメインで実行されます(http://azure.microsoft.com/blog/2010/12/02/new-full (「roleEntryPointとWebサイトからの静的メンバーへのアクセス」を参照)、実際には話すことができません。 –

+0

また、異なるプロセスとアプリケーションドメインで実行されているとは言いません。 – NStuke

関連する問題