1

我有几个不同的服务运行与 windows azure worker 角色相同的代码库。我正在尝试测试并查看当前执行的代码是否在特定实例中运行。如果我在管理 API 中调用它:

    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(
        new Uri("https://management.core.windows.net/" + subscriptionId + "/services/hostedservices/<<servicename>>/deploymentslots/production?embed-detail=true"));

我得到这样的回应:

    <Deployment xmlns="http://schemas.microsoft.com/windowsazure" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <Name>c8bd3b12f1bc4e0db9d8c1d59e97e48b</Name>
  <DeploymentSlot>Production</DeploymentSlot>
  <PrivateID>d1ea61e367e84aedb68de97eded3e896</PrivateID>
  <Status>Running</Status>
  <Label>SXRlbVVwZGF0ZXIgLSAzLzEzLzIwMTMgMTA6NDQ6MTUgQU0=</Label>
  <Url>http://itemupdater3.cloudapp.net/</Url>
  <RoleInstanceList>
    <RoleInstance>
      <RoleName>UpdateItems</RoleName>
      <InstanceName>UpdateItems_IN_0</InstanceName>
      <InstanceStatus>Ready</InstanceStatus>
    </RoleInstance>
  </RoleInstanceList>
  <UpgradeDomainCount>1</UpgradeDomainCount>
  <RoleList>
    <Role>
      <RoleName>UpdateItems</RoleName>
      <OsVersion>WA-GUEST-OS-1.22_201302-02</OsVersion>
    </Role>
  </RoleList>
</Deployment>

我正在尝试测试并查看当前执行的代码是否与此响应具有相同的 ID。如果我比较:

xml["Deployment"]["Name"].InnerText;

RoleEnvironment.CurrentRoleInstance.Role.Instances[0].Id;

它永远不会匹配。如何将 C# 中的内容与 API 返回的 ID 匹配?谢谢!

4

2 回答 2

2

您正在尝试将部署的名称(通常是单个类似 guid 的字符串,每次重新部署时唯一)与实例的名称(遵循 RoleName_IN_xxx 模式)进行比较。他们永远不会匹配。

我不能 100% 确定您要做什么,但是对 Service Management API 的调用永远不会为您提供有关当前实例的信息——因为它不知道您从哪里运行;您甚至可以从非 Azure 资源调用 API。它只会为您提供有关整个订阅的数据。

RoleEnvironment.CurrentRoleInstance.Id 将为您提供当前实例的 ID。

于 2013-03-13T19:15:01.403 回答
2

kevin,使用 RoleEnvironment.DeploymentId 而不是 RoleEnvironment.CurrentRoleInstance。这将允许您将当前运行的内容与您从服务管理 API 获得的内容进行比较。

于 2013-03-13T22:52:07.927 回答