如何在Azure云中列出所有端点,而不仅仅列出当前角色实例上的端点?
我尝试了以下代码,但它只列出了当前Azure实例上的端点,而不是任何其他Azure实例上的端点:
void ListCloudInstances()
{
var instances = new StringBuilder("");
foreach (var role in RoleEnvironment.Roles)
{
instances.AppendFormat("<h2>Role <em>{0}</em></h2><br/>", role.Value.Name);
if (role.Value.Instances.Count == 0)
instances.AppendFormat("<small>Role <em>{0}</em> has no role instances</small><br/><br/>", role.Value.Name);
foreach (var roleInstance in role.Value.Instances)
{
var currentRoleMarker = RoleEnvironment.CurrentRoleInstance.Id == roleInstance.Id ? " *" : String.Empty;
instances.AppendFormat("<h3>Role <em>{2}</em> instance <em>{0}</em>{1}</h3><br/>",
roleInstance.Id, currentRoleMarker, roleInstance.Role.Name);
// List some metadata about the role instance
instances.AppendFormat("<p>Role instance fault domain: {0}</p>", roleInstance.FaultDomain);
instances.AppendFormat("<p>Role for the instance: {0}</p>", roleInstance.Role.Name);
instances.AppendFormat("<p>Role instance update domain: {0}</p><br/>", roleInstance.UpdateDomain);
// List the endpoints
instances.AppendFormat("<h4>Role <em>{1}</em> instance <em>{0}</em> endpoints</h4><br/>", roleInstance.Id,
roleInstance.Role.Name);
foreach (RoleInstanceEndpoint instanceEndpoint in roleInstance.InstanceEndpoints.Values)
{
if (roleInstance.Role.Name == "Www")
instances.AppendFormat("<p><a href=\"{0}://{1}/Admin/Settings.aspx\" target=\"_blank\">{1}</a></p>",
instanceEndpoint.Protocol, instanceEndpoint.IPEndpoint);
else instances.AppendFormat("<p>Instance endpoint IP address, port, and protocol : {0} {1}</p>",
instanceEndpoint.IPEndpoint, instanceEndpoint.Protocol);
}
}
}
instances.AppendFormat("<small>* Current role instance is {0}</small>", RoleEnvironment.CurrentRoleInstance.Id);
CloudHtml.Text = instances.ToString();
}
在多角色项目上运行的输出,其中每个角色都有多个实例:
角色MultiThreadedWorkerRole
角色MultiThreadedWorkerRole没有角色实例
角色Www
角色Www实例 deployment22(203).CloudService1.Www_IN_1 *
角色实例错误域:1
实例的角色:Www
角色实例更新域:1
角色Www实例 deployment22(203).CloudService1.Www_IN_1 端点
127.255.0.3:82
127.255.0.3:444
- 当前角色实例为 deployment22(203).CloudService1.Www_IN_1
如果我重新运行上述查询,我会随机获取角色实例deployment22(203).CloudService1.Www_IN_0到deployment22(203).CloudService1.Www_IN_4的输出,由处理ASP.NET Web表单的实例决定运行上面的代码片段。例如:
角色MultiThreadedWorkerRole
角色MultiThreadedWorkerRole没有角色实例
角色Www
角色Www实例 deployment22(203).CloudService1.Www_IN_0 *
角色实例故障域:0
实例的角色:Www
角色实例更新域:0
角色Www实例 deployment22(203).CloudService1.Www_IN_0端点
127.255.0.2:82
127.255.0.2:444
- 当前角色实例为 deployment22(203).CloudService1.Www_IN_0
答案 0 :(得分:0)
我认为关键是在documentation of the RoleEnvironment's Roles property -
上的以下注释中必须至少为要启用的角色定义一个内部端点 在运行时知道的实例
我刚刚通过创建一个包含两个角色的云项目并使用RoleEnvironment.Roles
迭代角色来尝试它,而没有任何内部端点只有当前角色的实例可用。
将内部端点添加到另一个角色后,为我加载了实例。
Howeber - 只有内部端点列在角色实例的InstanceEndpoints
集合中。我看不到他们暴露的外部终点。