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