1

Windows azure ワーカー ロールと同じコード ベースを実行しているいくつかの異なるサービスがあります。現在実行中のコードが特定のインスタンスで実行されているかどうかをテストして確認しようとしています。管理 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

kevin さん、RoleEnvironment.CurrentRoleInstance の代わりに RoleEnvironment.DeploymentId を使用してください。これにより、現在実行されているものとサービス管理 API から取得したものを比較できます。

于 2013-03-13T22:52:07.927 に答える
2

デプロイの名前 (通常は、再デプロイするたびに一意の単一の GUID のような文字列) をインスタンスの名前 (RoleName_IN_xxx のパターンに従います) と比較しようとしています。それらは決して一致しません。

あなたが何をしようとしているのかは 100% わかりませんが、Service Management API を呼び出しても現在のインスタンスに関する情報は得られません。Azure 以外のリソースから API を呼び出すこともできます。サブスクリプション全体に関するデータを提供するだけです。

RoleEnvironment.CurrentRoleInstance.Id は、現在のインスタンスの ID を提供します。

于 2013-03-13T19:15:01.403 に答える