2012-08-15 8 views
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ウィザードを再実行する必要が少し減りました。Azure Compute Emulator:個々のインスタンスのIPを制御することは可能ですか?

どのエミュレートされたロールがどのIPにバインドするかを制御する正式な方法はありますか?そうでなければ、Rolesフォルダ内のプロジェクトの順番と同じスタートアップ/バインディングの順番です。もしそうなら、私のウェブの役割をAardvarkのように呼び出すことで、常に最初にバインドされたことを確認できますか?

+0

私自身の質問に対する部分的な答え:はい、 "_web"のようなものに私のMVC Webプロジェクト(ロールの名前も変更)の名前を変更すると、リストの先頭に移動してバインドされる一貫して127.255.0.0になりました。しかし、これを行うより良い方法があれば私はまだ興味がありますが、これはハックのように感じます。 – JcFx

答えて

4

なぜあなたはそのIPアドレスを変更しますか?これは、IP /ポートの競合を避けるために内部的にのみ使用されます。あなたのすべての役割は127.0.0.1:[port]を介してのみアクセスされ、これはあなたが信頼する党のアプリケーションのベースアドレスとして使うべきアドレスです。 127.255.0.XXアドレスは、Compute EmulatorのエミュレートされたLoad Balancerの背後にある内部アドレスです。

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

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

IP Address and Port allocation hereについて読んでください。

UPDATE

アプリがIIS Expressで(エミュレート直接IPアドレス、別名DIP)127.255.0.XXにバインドされているが、あなたのアプリケーションへの実際の呼び出しは127.0.0.1:81を通過しなければなら(エミュレートされた仮想IPアドレス、別名VIP)(ポートのみが変更されます)。これは、Visual Studioがアプリケーションを起動するときのデフォルトのロードページです。開発ファブリック(a.k.a Compute Emulator)は、127.0.0.1:81(エミュレートされたVIP)でリッスンし、127.255.0.XX(エミュレートされたDIP)に広がる適切なインスタンスにトラフィックをリダイレクトするLoad Balancerをエミュレートしました。 これは、compute emulatorを使用しているときと、ACS依存パーティを設定しているときに、常に127.0.0.1を使用する必要がある理由です。あなたがしていることは間違っていてAzure環境を代表していません。

Windows Azureのレミノロジーとネットワーキングについては、thisthatのブログエントリを読むことができます。

+1

私はそれを変更したくありません - 私はそれが一貫しているようにしたいので、私のACSはまだ動作します。 ACSは外部から管理コンソールに設定されているため、RoleEnvironmentは使用できません。 "あなたの役割はすべて127.0.0.1:[port]を介してのみアクセスされます" - これは正しくありません。 127.0.0.1は私のシステム上で完全に何かを指しています(通常のIISはlocalhostとしてサイトを実行しています)。 – JcFx

+0

Compute Emulatorを使用してローカルで作業する場合、ACSの依拠当事者のベースアドレスはhttp://127.0.0.1:[given port]/127.0.0.1は決して変更されません。存在するロール数/インスタンス数/削除を追加。ポートはポートの可用性に依存しますが、通常は81です。これは、IISが稼働しているために80が占有されているためです(フル)。 – astaykov

+0

Strange - IIS expressは、127.0.0.1:82(あなたの言うとおり)と127.255.0。* - の両方で利用可能にします。*は、*は各役割で増分されます。私は、前のバインディングがそこにあったことを認識しませんでした。第2のものは完全に機能します(ロールディスカバリーなどを含む)ので、間違いなくエミュレートされています。とにかく答えとしてマーク。迅速なおかげでありがとう。 – JcFx

6

私の経験が記述されたシナリオとまったく同じかどうかはわかりませんが、少なくともインスピレーションがあると思います。

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

私は簡単な技術で問題解決している:私のWebRolesで

を私はdebug.myservice.comまたはdebug.myotherservice.comのようなドメイン名を常に参照してください。例えば、のようないくつかの簡単な文を追加し

windows/system32/drivers/etc/hosts 

によって:

ローカルIPアドレスは、あなたが見つけることができるホストファイルを使用して解決される

127.0.0.1 debug.myservice.com 
127.0.0.2 debug.myotherservice.com 

この問題を解決するが、新しいデバッグセッションを起動するたびにホストファイルを手動で更新する必要があるため、非常に退屈な作業になる可能性があります。

しかし、シンプルで強力なソリューションがあります。 あなたはセットアップクラウドサービスが初期化されるたびに実行され、簡単なスタートアップスクリプトをすることができます知っている、あなたはここで詳細を見つけることができます。

http://msdn.microsoft.com/en-us/library/windowsazure/hh180155.aspx

あなたはクラウド上で実行されているときにも、あなたが別のスクリプトを実行することができますかエミュレータで

私が行うことは、クラウドサービスがエミュレータ(およびエミュレータのみ)環境で初期化されるたびにホストファイルを自動的に更新するスクリプトを実行することです。

ここではスクリプト:あなたがスタートアップでスクリプトを実行するために、ServiceDefinition.csdefに追加するために必要なもの

IF "%ComputeEmulatorRunning%" == "true" (
    cd Startup 
    UpdateDnsHostsOnDebugEnv.exe MyCompany.MyService.Site.WebRole debug.myservice.com 
    cd.. 
) 

、ここで:

<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を実行して結果を解析して、ロールのローカルエンドポイントアドレスを抽出し、ホストファイルを更新するだけです。

このヘルプが必要です。

+0

こんにちは@ lorenzo-melato - あなたはこれをどうやってやったのか教えてくれませんか?これに関する私の質問は、 http://stackoverflow.com/questions/20493043/how-to-map-ip-to-hostname-when-debugging-azure-cloud-projects – mbaaz

+0

Hey @mbaazです。申し訳ありませんが、今あなたのコメントを参照してください...正確にあなたのために明確ではない? –

+0

あなたの答え@ lorenzo-melatoに感謝します。私の興味はあなたのUpdateDnsHostsOnDebugEnv.exeをどのように書いたかです。 csrun.exeを使用して、デバッグ中のプロジェクトから必要な情報を取得する方法。私は今、それを理解できないようです。 – mbaaz

関連する問題