私の経験が記述されたシナリオと正確に一致するかどうかはわかりませんが、少なくともインスピレーションになると思います.
私のソリューションには 4 つの異なるクラウド サービスがあり、それぞれに Web ロールがあり、すべてが適切に機能するために他のサービスの URL を知っている必要があります。本番環境では、すべてのサービスの URL を正確に把握しており、各サービスをドメイン名で参照できます。しかし、デバッグするときは悪夢になる可能性があります。これは、クラウド サービスを特定の IP アドレス (およびポート) にバインドするオプションがなく、DevFabric が特定のクラウド サービスが 2 つの異なるデバッグ セッション間で同じアドレスを維持することを保証できないためです。 .
私は簡単なテクニックで問題を解決しました:
私の WebRoles では、常にdebug.myservice.comやdebug.myotherservice.comのようなドメイン名を参照しています。
ローカル IP アドレスは、次の場所にあるホストファイルを使用して解決されます。
windows/system32/drivers/etc/hosts
たとえば、次のような簡単なステートメントを追加します。
127.0.0.1 debug.myservice.com
127.0.0.2 debug.myotherservice.com
これで問題は解決しますが、新しいデバッグ セッションを開始するたびにホストファイルを手動で更新する必要があるため、非常に退屈な場合があります。
しかし、シンプルで強力な解決策があります。クラウド サービスが初期化されるたびに実行される単純な起動スクリプトをセットアップできることはご存知でしょう。詳細は次の場所にあります。
http://msdn.microsoft.com/en-us/library/windowsazure/hh180155.aspx
また、クラウドまたはエミュレーターで実行しているときに、別のスクリプトを実行できます。
私がしていることは、クラウド サービスがエミュレーター (およびエミュレーターのみ) 環境で初期化されるたびに、hosts ファイルを自動的に更新するスクリプトを実行することです。
ここでスクリプト:
IF "%ComputeEmulatorRunning%" == "true" (
cd Startup
UpdateDnsHostsOnDebugEnv.exe MyCompany.MyService.Site.WebRole debug.myservice.com
cd..
)
ここでは、起動時にスクリプトを実行するためにServiceDefinition.csdefに追加する必要があるものを示します。
<Startup>
<Task commandLine="Startup\UpdateDnsHosts.cmd" executionContext="elevated" taskType="foreground">
<Environment>
<Variable name="ComputeEmulatorRunning">
<RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
</Variable>
</Environment>
</Task>
</Startup>
UpdateDnsHostsOnDebugEnv.exeプログラムの使用に注意してください。これは、csrun.exe を実行して結果を解析し、役割のローカル エンドポイント アドレスを抽出してホストファイルを更新するだけの単純なコンソール アプリです。
この助けを願っています。