本页介绍如何通过 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);
}
正如@AvkashChauhan 指出的那样,您应该能够通过 Dns 类检索主机名。不过,我很好奇,为什么您需要主机名。如果是用于角色实例之间的通信,则实际上不需要主机名。相反,您可以查询角色实例端点(假设您设置一个作为内部端点),然后对于每个实例,您可以请求 IP 地址和端口,这将允许您建立到任何给定实例的直接连接。因此,修改您拥有的代码:
foreach (RoleInstance instance in RoleEnvironment.Roles["MyRole"].Instances) {
writeline(InstanceEndpoints["myendpoint"].IPEndpoint);
实际上,您可能需要主机名,如果需要,请忽略此答案。但是...如果您正在寻找一种在角色实例之间建立 tcp/http/udp 连接的方法,那么这是一种检索角色实例的所有 ip/端口组合的非常简单的方法。
当您在虚拟机中时,您可以使用任何 .NET API 来获取代码中的主机名,即:
Dns.GetHostName();
您可能会更改 Windows Azure VM 主机名的原因是,在大多数情况下,VM 主机名设置为 RD00* **,因此如果您有多个实例,所有主机名都会不同,并且不容易记住和管理。因此,为了让所有主机名易于记忆,您将使用以下属性,以便与同一角色相关的所有实例的名称都为 vm-name##,这样您就可以轻松记住主机名并正确管理它们。
<Role name="<role-name>" vmName=“<vm-name>”>
因此,要更改主机名,您可以使用上述配置设置,但要获取主机名,您只需使用标准的 .net API 即可。