列出Azure Cloud中的所有实例端点

时间:2013-12-13 13:14:02

标签: azure cloud azure-web-roles

如何在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
  •   

1 个答案:

答案 0 :(得分:0)

我认为关键是在documentation of the RoleEnvironment's Roles property -

上的以下注释中
  

必须至少为要启用的角色定义一个内部端点   在运行时知道的实例

我刚刚通过创建一个包含两个角色的云项目并使用RoleEnvironment.Roles迭代角色来尝试它,而没有任何内部端点只有当前角色的实例可用。

将内部端点添加到另一个角色后,为我加载了实例。 Howeber - 只有内部端点列在角色实例的InstanceEndpoints集合中。我看不到他们暴露的外部终点。