2013-03-13 92 views
1

我有幾個不同的服務與windows azure工作者角色運行相同的代碼庫。 我想測試,看看當前正在執行的代碼是否在特定的實例中運行。如果我在管理API調用此:匹配Windows Azure中的部署ID

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進行匹配? 謝謝!

回答

2

您試圖比較部署的名稱(通常是每次重新部署時唯一一個類似guid的字符串)到實例的名稱(遵循RoleName_IN_xxx的模式)。他們永遠不會匹配。

我不是100%確定你要做什麼,但是對Service Management API的調用永遠不會給你關於你當前實例的信息 - 因爲它不知道你從哪裏運行;你甚至可以從非Azure資源調用API。它只會給你關於整個訂閱的數據。

RoleEnvironment.CurrentRoleInstance.Id將爲您提供當前實例的ID。

+0

謝謝,伊戈爾。我是否也可以通過服務API獲取實例的ID?是XML中的「PrivateID」還是「名稱」或「標籤」? – kevin 2013-03-13 19:29:58

+0

它是RoleInstanceList元素的RoleInstance元素下的InstanceName屬性 – Igorek 2013-03-13 19:34:51

2

kevin,請使用RoleEnvironment.DeploymentId而不是RoleEnvironment.CurrentRoleInstance。這將允許您比較當前正在運行的內容和從服務管理API獲得的內容。