2

このページでは、cscfg を使用してロール インスタンスにホスト名を割り当てる方法について説明します。アプリでアクセスするにはどうすればよいですか? RoleInstance には VMName メンバーがないため、次のアプローチは機能しません。

foreach (RoleInstance instance in RoleEnvironment.Roles["MyRole"].Instances) {
    Console.WriteLine(instance.VMName);
}
4

2 に答える 2

0

仮想マシン内にいるときは、任意の .NET API を使用してコード内のホスト名を取得できます。つまり、次のようになります。

Dns.GetHostName();

Windows Azure VM のホスト名を変更する理由は、ほとんどの場合、VM のホスト名が RD00* **に設定されているためです。そのため、複数のインスタンスがある場合、すべてのホスト名が異なり、覚えたり管理したりするのが容易ではありません。したがって、すべてのホスト名を覚えやすくするには、次のプロパティを使用して、同じロールに関連するすべてのインスタンスに vm-name## という名前を付けます。これにより、ホスト名を簡単に覚えて適切に管理できます。

<Role name="<role-name>" vmName=“&lt;vm-name>”&gt;

したがって、ホスト名を変更するには、上記の構成設定を使用できますが、ホスト名を取得するには、標準の .net API を使用するだけで機能します。

于 2012-06-21T23:19:25.933 に答える
0

@AvkashChauhan が指摘したように、Dns クラスを介してホスト名を取得できるはずです。しかし、なぜホスト名が必要なのか、興味があります。ロール インスタンス間の通信の場合、実際にはホスト名は必要ありません。代わりに、ロール インスタンス エンドポイントをクエリして (内部エンドポイントとして設定した場合)、インスタンスごとに IP アドレスとポートを要求できます。これにより、任意のインスタンスへの直接接続を確立できます。したがって、あなたが持っていたコードを変更します:

foreach (RoleInstance instance in RoleEnvironment.Roles["MyRole"].Instances) {
   writeline(InstanceEndpoints["myendpoint"].IPEndpoint);

確かに、何かのためにホスト名が必要な場合があります。その場合は、この回答を無視してください。しかし...探しているのがロール インスタンス間で tcp/http/udp 接続を確立する方法である場合、これはロール インスタンスのすべての IP/ポートの組み合わせを取得する非常に簡単な方法です。

于 2012-06-22T00:41:38.850 に答える