6

2012 年 6 月の Azure SDK、Visual Studio 2010、および IIS Express を使用して、127.255.0.2 で実行されている Web アプリケーションを使用しています。認証に ACS を使用しており、アプリはこの IP で証明書利用者として構成されています。ソリューションに新しいワーカー ロールを追加したところ、何らかの理由で Web アプリの IP が 127.255.0.3 に戻されました。ソリューションの他の場所でこの IP が変更されたのはこれで 3 回目で、新しい証明書利用者の設定を追加して STS ウィザードを再実行する必要があることに少しうんざりしています。

どのエミュレートされたロールがどの IP にバインドされるかを制御する正式な方法はありますか? そうでない場合、起動/バインドの順序は Roles フォルダー内のプロジェクトの順序と同じですか? そうであれば、Aardvark のような Web ロールを呼び出して、常に最初にバインドするようにしますか?

4

2 に答える 2

6

私の経験が記述されたシナリオと正確に一致するかどうかはわかりませんが、少なくともインスピレーションになると思います.

私のソリューションには 4 つの異なるクラウド サービスがあり、それぞれに Web ロールがあり、すべてが適切に機能するために他のサービスの URL を知っている必要があります。本番環境では、すべてのサービスの URL を正確に把握しており、各サービスをドメイン名で参照できます。しかし、デバッグするときは悪夢になる可能性があります。これは、クラウド サービスを特定の IP アドレス (およびポート) にバインドするオプションがなく、DevFabric が特定のクラウド サービスが 2 つの異なるデバッグ セッション間で同じアドレスを維持することを保証できないためです。 .

私は簡単なテクニックで問題を解決しました:

私の WebRoles では、常にdebug.myservice.comdebug.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 を実行して結果を解析し、役割のローカル エンドポイント アドレスを抽出してホストファイルを更新するだけの単純なコンソール アプリです。

この助けを願っています。

于 2013-05-29T12:40:12.230 に答える
4

なぜその IP アドレスを変更したいのですか? これは、IP/ポートの競合を避けるために内部でのみ使用されます。すべてのロールは 127.0.0.1:[ポート] 経由でのみアクセスされ、これは証明書利用者アプリのベース アドレスとして使用する必要があるアドレスです。127.255.0.XX アドレスは、コンピュート エミュレーターのエミュレートされたロード バランサーの背後にある内部アドレスです。

Compute Emulator のインスタンス/ロールのインスタンスの IP アドレスを制御するための正式な方法も非公式な方法もありません。さらに、それを行う方法があったとしても、それを使用することはお勧めしません!

RoleEnvironment.CurrentRoleInstance.InstanceEndpointsプロパティを介して、クラウド サービスで構成された任意のエンドポイントの正しい IP アドレスとポートをいつでも取得できます。

IP アドレスとポートの割り当てについては、こちらをご覧ください。

アップデート

アプリは IIS Express で 127.255.0.XX (エミュレートされた直接 IP アドレス、別名 DIP) にバインドされていますが、アプリへの実際の呼び出しは 127.0.0.1:81 (エミュレートされた仮想 IP アドレス、別名 VIP) を経由する必要があります (ここでポートの変更のみ)。これは、Visual Studio がアプリを起動するときの既定の読み込みページです。開発ファブリック (別名コンピュート エミュレーター) は、127.0.0.1:81 (エミュレートされた VIP) でリッスンし、127.255.0.XX (エミュレートされた DIP) に分散された適切なインスタンスにトラフィックをリダイレクトするロード バランサーをエミュレートしました。そのため、コンピューティング エミュレーターを使用するとき、および ACS 証明書利用者を構成するときは、常に 127.0.0.1 を使用する必要があります。それ以外のことはすべて間違っており、Azure 環境を表すものではありません。

あれこれのブログ エントリ読んで、Windows Azure を使用したレミノロジーとネットワーキングを理解することができます。

于 2012-08-15T10:48:27.197 に答える