Azure 以编程方式访问对等角色主机名

Azure 以编程方式访问对等角色主机名,azure,azure-configuration,Azure,Azure Configuration,这描述了如何通过cscfg将主机名分配给角色实例。如何在我的应用程序中访问它?以下方法不起作用,因为RoleInstance没有VMName成员 foreach (RoleInstance instance in RoleEnvironment.Roles["MyRole"].Instances) { Console.WriteLine(instance.VMName); } 当您在虚拟机中时,您可以使用任何.NET API在代码中获取主机名,即: Dns.GetHostName();

这描述了如何通过cscfg将主机名分配给角色实例。如何在我的应用程序中访问它?以下方法不起作用,因为RoleInstance没有VMName成员

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

当您在虚拟机中时,您可以使用任何.NET API在代码中获取主机名,即:

Dns.GetHostName();
您可能更改Windows Azure虚拟机主机名的原因是,在大多数情况下,虚拟机主机名设置为RD00****,因此,如果您有多个实例,所有主机名都将不同,并且不容易记住和管理。因此,为了使所有主机名易于记住,您将使用以下属性,以便与同一角色相关的所有实例的名称都为vm name##,这样您就可以轻松记住主机名并正确管理它们

<Role name="<role-name>" vmName=“<vm-name>”>


所以,要更改主机名,您可以使用上述配置设置,但要获取主机名,您只需使用标准的.NETAPI即可

当您在虚拟机中时,您可以使用任何.NET API在代码中获取主机名,即:

Dns.GetHostName();
您可能更改Windows Azure虚拟机主机名的原因是,在大多数情况下,虚拟机主机名设置为RD00****,因此,如果您有多个实例,所有主机名都将不同,并且不容易记住和管理。因此,为了使所有主机名易于记住,您将使用以下属性,以便与同一角色相关的所有实例的名称都为vm name##,这样您就可以轻松记住主机名并正确管理它们

<Role name="<role-name>" vmName=“<vm-name>”>


所以,要更改主机名,您可以使用上述配置设置,但要获取主机名,您只需使用标准的.NETAPI即可

正如@AvkashChauhan指出的,您应该能够通过Dns类检索主机名。不过,我很好奇,为什么需要主机名。如果是用于角色实例之间的通信,实际上不需要主机名。相反,您可以查询角色实例端点(假设您将其设置为内部端点),然后针对每个实例请求ip地址和端口,这将允许您建立到任何给定实例的直接连接。因此,修改您拥有的代码:

foreach(RoleEnvironment.Roles[“MyRole”].Instances中的RoleInstance实例){
writeline(InstanceEndpoints[“myendpoint”].IPEndpoint);

您可能确实需要主机名,如果需要,请忽略这个答案。但是……如果您正在寻找一种在角色实例之间建立tcp/http/udp连接的方法,那么这是一种检索角色实例的所有ip/端口组合的非常简单的方法。

正如@AvkashChauhan指出的,您应该能够检索通过Dns类获取主机名。不过,我很好奇为什么需要主机名。如果是用于角色实例之间的通信,实际上不需要主机名。相反,您可以查询角色实例终结点(假设您将其设置为内部终结点),然后对于每个实例,您可以请求ip地址和端口,这将允许您建立到任何给定实例的直接连接。因此,修改您拥有的代码:

foreach(RoleEnvironment.Roles[“MyRole”].Instances中的RoleInstance实例){
writeline(InstanceEndpoints[“myendpoint”].IPEndpoint);
确实,您可能需要主机名,如果需要,请忽略此答案。但是……如果您要寻找的是在角色实例之间建立tcp/http/udp连接的方法,那么这是检索角色实例的所有ip/端口组合的非常简单的方法