2012-06-21 77 views
2

page描述如何通過cscfg將主機名分配給角色實例。我如何在我的應用程序中訪問它?由於RoleInstance沒有VMName成員,因此以下方法無效。以編程方式訪問對等角色主機名

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

回答

0

當你虛擬機裏面,你可以使用任何.NET API在你的代碼,即獲取主機名:

Dns.GetHostName(); 

的原因,你可能會改變你的Windows Azure虛擬機的主機名在大多數情況下,VM主機名被設置爲RD00 * **因此,如果您有多個實例,則所有主機名都會不同並且不易記憶和管理。因此爲了讓所有主機名都容易記住,您將使用以下屬性,以便與相同角色相關的所有實例都具有名稱vm-name ##,這樣您可以輕鬆記住主機名並正確管理它們。

<Role name="<role-name>" vmName=「<vm-name>」> 

因此改變主機名,你可以使用上面的配置設置,但要獲得主機名你可以使用標準的.NET API,它會工作。

0

正如@AvkashChauhan指出的那樣,您應該能夠通過Dns類檢索主機名。不過,我很好奇,爲什麼你需要主機名。如果是用於角色實例之間的通信,則實際上不需要主機名。相反,您可以查詢角色實例端點(假設您將其中一個設置爲內部端點),然後爲每個實例請求IP地址和端口,這將允許您建立與任何給定實例的直接連接。因此,修改代碼,您有:

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

您可能確實,需要主機名的東西,如果是這樣,就忽略了這個答案。但是......如果你正在尋找的是一種在角色實例之間建立tcp/http/udp連接的方式,這是一種非常簡單的方法來檢索你的角色實例的所有ip/port組合。