6)testing RoleEnvironment.Changing and RoleEnvironment.Changed event handlers in development fabric?
- 質問:
RoleEnvironment.Changing と RoleEnvironment.Changed イベントをコンピュートエミュレーターでテストする方法はありますでしょうか?[デバッグ][初級]
- 回答:
csrunコマンドを使用することで可能です。
- 解説:
RoleEnvironment.ChangingイベントとRoleEnvironment.Changedイベントは、ロールインスタンスが稼働しているWindows Azureの環境を表現するRoleEnvironmentクラスに定義されているイベントで、構成設定ファイル(.cscfgファイル)の変更時に発生します。
また、csrunコマンドはWindows Azureのローカルデバッグ環境の操作ツールです。このツールを使用することで、サービスの起動/停止/状態変更などを行うことができます。
今回は状態変更なので以下のコマンドラインとなります。
csrun /update:<deployment-id>;<configuration-file>
このコマンドを使用することで、コンピュートエミュレーターでもイベントをテストすることができます。では、具体的に見ていきます。
1. 構成設定を定義する
クラウドプロジェクトの各ロールを右クリックして、プロパティを表示して設定を選択します。[設定を追加]を選択して構成設定を追加します。今回は名前を「Setting」、種類を「文字列」、値を「before」にしてデバッグを実行します。
2. 設定を変更する
cscfgファイルを直接修正します。ファイルは、<プロジェクトのフォルダ>\bin\Debug\ServiceConfiguration.cscfgになります。設定項目はxml形式となっていますが、Setting要素の[value]を「before」から「after」に変更します。
<Role name="WorkerRole1"> <Instances count="1" /> <ConfigurationSettings> <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" /> <Setting name="Setting" value="After" /> </ConfigurationSettings> </Role>
3. 状態変更を反映する
[スタートメニュー]→[すべてのプログラム]→[Windows Azure SDK v1.3]→[Windows Azure SDK Command Prompt]でコマンドプロンプトを起動します。
「csrun /status」コマンドを実行して、Deployment-Id:の数値を取得します。以下の例では330になります。
c:\Program Files\Windows Azure SDK\v1.3>csrun /status Windows(R) Azure(TM) Desktop Execution Tool version 1.3.0.0 for Microsoft(R) .NET Framework 3.5 Copyright (c) Microsoft Corporation. All rights reserved. Using session id 1 ================================================================== Deployment-Id: 330 Roles: WorkerRole1 0 Started (ProcessId 6544) Image-Location: c:\users\nori\documents\visual studio 2010\Projects\WindowsAzureProject15\bin\Debug\WindowsAzureProject15.csx c:\Program Files\Windows Azure SDK\v1.3>
「csrun /update:<取得したDeployment-Idの数値>;<2.で変更したcscfgファイル>」コマンドを実行して変更を反映します。
c:\Program Files\Windows Azure SDK\v1.3>csrun /update:330;"C:\Users\nori\Documents\Visual Studio 2010\Projects\WindowsAzureProject15\bin\Debug\ServiceConfiguration.cscfg" Windows(R) Azure(TM) Desktop Execution Tool version 1.3.0.0 for Microsoft(R) .NET Framework 3.5 Copyright (c) Microsoft Corporation. All rights reserved. Using session id 1 Updating deployment 330 with new settings from C:\Users\nori\Documents\Visual Studio 2010\Projects\WindowsAzureProject15\bin\Debug\ServiceConfiguration.cscfg... c:\Program Files\Windows Azure SDK\v1.3>
これで、イベントが発生します。後はブレークポイントなどを設定することでイベントの発生を確認できます。
なお、csrunコマンドではインスタンスを減少させることができないなど、エミュレーターとして機能が制限されています。実際にサービスの動作確認を行う際には十分に注意して使用してください。