2013-03-13 1 views
1

У меня есть несколько разных сервисов, работающих на той же базе кода, что и рабочие роли azure для Windows. Я пытаюсь проверить и проверить, работает ли исполняемый код в определенном экземпляре. Если я позвоню к этому в API управления:Сопоставьте идентификатор развертывания в Windows Azure

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> 

Я пытаюсь проверить и посмотреть, если в настоящее время выполнения кода имеет тот же идентификатор, как это ответ. Если сравнивать:

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

Для

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

Он никогда не совпадает. Как мне сопоставить что-то с C# с идентификатором, возвращаемым API? Спасибо!

ответ

2

Вы пытаетесь сравнить имя развертывания (как правило, единственную директивную строку, уникальную при каждом повторном развертывании) для имени экземпляра (следует шаблон RoleName_IN_xxx). Они никогда не будут соответствовать.

Я не уверен на 100%, что вы пытаетесь сделать, но вызов API управления сервисом никогда не даст вам информации о вашем текущем экземпляре, потому что он не знает, откуда вы это делаете; вы можете даже вызвать API из ресурсов, отличных от Azure. Он просто даст вам данные о всей подписке.

RoleEnvironment.CurrentRoleInstance.Id предоставит вам идентификатор текущего экземпляра.

+0

Спасибо, Игорь. Могу ли я получить идентификатор экземпляра также через API-интерфейс службы? Является ли это «PrivateID» или «Name» или «Label» в XML выше? – kevin

+0

Это имя экземпляра proprety под элементом RoleInstance элемента RoleInstanceList – Igorek

2

kevin, используйте RoleEnvironment.DeploymentId вместо RoleEnvironment.CurrentRoleInstance. Это позволит вам сравнить то, что в настоящее время работает с тем, что вы получаете от API управления сервисами.