[英]Azure, Cloud Service, scale with .NET
如何使用Microsoft.Azure.Management.Compute更改Cloud Service上的實例號? 還是其他任何.NET方式?
並不是您問題的真正答案(因為我沒有使用過該庫),但我會盡力為您提供一個總體思路(希望它可以幫助您在庫中找到正確的方法)。
您可能已經知道,雲服務角色的實例數存儲在配置文件(* .cscfg)中,該文件是XML文件。 擴展Cloud Service涉及更改此配置文件。
您需要做的是首先獲取此配置文件。 獲得此配置文件后,您可以通過讀取文件內容來從中創建XML文檔。
接下來,您需要在該XML文檔中找到您想要擴展的所需角色的<Instances>
節點。 您可以將此節點的count
屬性的值更新為所需的實例計數。
完成此操作后,您將需要應用此更改的配置。 調用的REST API操作是“ Change Deployment Configuration
。 這將啟動您的Cloud Service的擴展。
Microsoft.Azure.Management.Compute客戶端庫適用於Azure資源管理器下的虛擬機 。 為了管理Azure雲服務,我們可以使用此.NET(Microsoft.WindowsAzure.Management.Compute)管理庫 。
以下示例代碼對我而言效果很好,請參考它。
static void Main(string[] args)
{
var managementCertThumbprint = "{CertThumbprint}";
var subscriptionid = "{subscriptionid}";
var servicename = "fehancloud";
X509Certificate2 managementCert = FindX509Certificate(managementCertThumbprint);
SubscriptionCloudCredentials creds = new CertificateCloudCredentials(subscriptionid, managementCert);
ComputeManagementClient cmclient = new ComputeManagementClient(creds);
var detailed = cmclient.HostedServices.GetDetailed(servicename);
var deployment = detailed.Deployments
.First(_ => _.DeploymentSlot == DeploymentSlot.Production);
var xConfig = XDocument.Parse(deployment.Configuration);
Func<string, XName> n = (name) => XName.Get(name,
"http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration");
Func<XDocument, string, int> getInstanceCount = (doc, rolename) =>
{
var role = doc.Root.Elements(n("Role")).FirstOrDefault(_ => _.Attribute("name").Value == rolename);
if (role == null) return -1;
var v = role.Element(n("Instances")).Attribute("count").Value;
Console.WriteLine(int.Parse(v));
return int.Parse(v);
};
Action<XDocument, string, int> setInstanceCount = (doc, rolename, newInstanceCount) =>
{
if (newInstanceCount < 1)
{
newInstanceCount = 1;
}
var role = doc.Root.Elements(n("Role")).FirstOrDefault(_ => _.Attribute("name").Value == rolename);
role.Element(n("Instances")).Attribute("count").Value = newInstanceCount.ToString();
};
Action<XDocument, string, int> changeInstanceCount = (doc, rolename, deltaCount) =>
{
int oldCount = getInstanceCount(doc, rolename);
var newCount = oldCount + deltaCount;
setInstanceCount(doc, rolename, newCount);
};
changeInstanceCount(xConfig, "WorkerRole1", 2);
var response = cmclient.Deployments.ChangeConfigurationBySlot(
serviceName: detailed.ServiceName,
deploymentSlot: deployment.DeploymentSlot,
parameters: new DeploymentChangeConfigurationParameters()
{
Configuration = xConfig.ToString()
});
}
private static X509Certificate2 FindX509Certificate(string managementCertThumbprint)
{
X509Store store = null;
try
{
store = new X509Store(StoreName.My, StoreLocation.CurrentUser); //set StoreLocation based on your specified value
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
X509Certificate2Collection certs = store.Certificates.Find(
findType: X509FindType.FindByThumbprint,
findValue: managementCertThumbprint,
validOnly: false);
if (certs.Count == 0)
{
return null;
}
return certs[0];
}
finally
{
if (store != null) store.Close();
}
}
注意 :我上傳了管理證書。
packages.config
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Hyak.Common" version="1.0.2" targetFramework="net45" />
<package id="Microsoft.Azure.Common" version="2.0.4" targetFramework="net45" />
<package id="Microsoft.Azure.Common.Dependencies" version="1.0.0" targetFramework="net45" />
<package id="Microsoft.Bcl" version="1.1.9" targetFramework="net45" />
<package id="Microsoft.Bcl.Async" version="1.0.168" targetFramework="net45" />
<package id="Microsoft.Bcl.Build" version="1.0.14" targetFramework="net45" />
<package id="Microsoft.IdentityModel.Clients.ActiveDirectory" version="3.13.8" targetFramework="net45" />
<package id="Microsoft.Net.Http" version="2.2.22" targetFramework="net45" />
<package id="Microsoft.WindowsAzure.Management.Compute" version="13.0.0" targetFramework="net45" />
<package id="Newtonsoft.Json" version="6.0.4" targetFramework="net45" />
</packages>
在執行changeInstanceCount方法后 ,您可以看到新實例正在啟動。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.