簡體   English   中英

Azure,雲服務,可通過.NET進行擴展

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM