このページでは、cscfg を使用してロール インスタンスにホスト名を割り当てる方法について説明します。アプリでアクセスするにはどうすればよいですか? RoleInstance には VMName メンバーがないため、次のアプローチは機能しません。
foreach (RoleInstance instance in RoleEnvironment.Roles["MyRole"].Instances) {
Console.WriteLine(instance.VMName);
}
このページでは、cscfg を使用してロール インスタンスにホスト名を割り当てる方法について説明します。アプリでアクセスするにはどうすればよいですか? RoleInstance には VMName メンバーがないため、次のアプローチは機能しません。
foreach (RoleInstance instance in RoleEnvironment.Roles["MyRole"].Instances) {
Console.WriteLine(instance.VMName);
}
仮想マシン内にいるときは、任意の .NET API を使用してコード内のホスト名を取得できます。つまり、次のようになります。
Dns.GetHostName();
Windows Azure VM のホスト名を変更する理由は、ほとんどの場合、VM のホスト名が RD00* **に設定されているためです。そのため、複数のインスタンスがある場合、すべてのホスト名が異なり、覚えたり管理したりするのが容易ではありません。したがって、すべてのホスト名を覚えやすくするには、次のプロパティを使用して、同じロールに関連するすべてのインスタンスに vm-name## という名前を付けます。これにより、ホスト名を簡単に覚えて適切に管理できます。
<Role name="<role-name>" vmName=“<vm-name>”>
したがって、ホスト名を変更するには、上記の構成設定を使用できますが、ホスト名を取得するには、標準の .net API を使用するだけで機能します。
@AvkashChauhan が指摘したように、Dns クラスを介してホスト名を取得できるはずです。しかし、なぜホスト名が必要なのか、興味があります。ロール インスタンス間の通信の場合、実際にはホスト名は必要ありません。代わりに、ロール インスタンス エンドポイントをクエリして (内部エンドポイントとして設定した場合)、インスタンスごとに IP アドレスとポートを要求できます。これにより、任意のインスタンスへの直接接続を確立できます。したがって、あなたが持っていたコードを変更します:
foreach (RoleInstance instance in RoleEnvironment.Roles["MyRole"].Instances) {
writeline(InstanceEndpoints["myendpoint"].IPEndpoint);
確かに、何かのためにホスト名が必要な場合があります。その場合は、この回答を無視してください。しかし...探しているのがロール インスタンス間で tcp/http/udp 接続を確立する方法である場合、これはロール インスタンスのすべての IP/ポートの組み合わせを取得する非常に簡単な方法です。