Получить список экземпляров в размещенных сервисах в Azure - PullRequest
0 голосов
/ 25 мая 2020

У меня есть рабочая роль в Azure, и я хочу перечислить все экземпляры в C# do tnet core. Существует несколько пакетов управления azure nuget. Я протестировал несколько из них, но ни один из них не дал ожидаемого результата. Я также попробовал собственный apis rest, но не смог найти рабочий образец.

Может ли кто-нибудь опубликовать рабочий образец? В идеале я хотел бы использовать библиотеку Microsoft nuget для управления Azure.

Протестировано до сих пор: CSManage: https://github.com/Plasma/csmanage => Он не работает на ядре do tnet (это старая модель WCF).

Пробовал использовать REST: 401 неавторизованный Azure api управления => Мне отказано в доступе. (Работает только через скрипач и решения я не нашел)

1 Ответ

1 голос
/ 27 мая 2020

Azure облачный сервис - это Azure класс c ресурс . Поэтому нам нужно использовать Azure API управления услугами, чтобы управлять им. Если мы хотим вызвать API, нам нужно выполнить аутентификацию сертификатов клиента X509. Дополнительные сведения см. В документе

Подробные инструкции приведены ниже

  1. Сертификат Uplaod на Azure a. создать сертификат

    $cert = New-SelfSignedCertificate -DnsName yourdomain.cloudapp.net -CertStoreLocation "cert:\LocalMachine\My" -KeyLength 2048 -KeySpec "KeyExchange"
    $password = ConvertTo-SecureString -String "your-password" -Force -AsPlainText
    Export-PfxCertificate -Cert $cert -FilePath ".\my-cert-file.pfx" -Password $password
    Export-Certificate -Type CERT -Cert $cert -FilePath .\my-cert-file.cer
    

    b загрузить .cer файл в Azure (Подписки -> ваша подписка -> Сертификаты управления) enter image description here

  2. Код

 static async Task Main(string[] args)
 {
   var _clientHandler = new HttpClientHandler();
                _clientHandler.ClientCertificates.Add(GetStoreCertificate("the cert's thumbprint" ));
                _clientHandler.ClientCertificateOptions = ClientCertificateOption.Manual;
                String uri = string.Format("https://management.core.windows.net/{0}/services/hostedservices/{1}?embed-detail=true", "subscription id","<could service name>");
                using (var _client = new HttpClient(_clientHandler))
                using (var request = new HttpRequestMessage(HttpMethod.Get, uri)) {

                    request.Headers.Add("x-ms-version", "2014-05-01");
                    request.Headers.Add("Accept", "application/xml");
                    //request.Headers.Add("Content-Type", "application/xml");
                    using (HttpResponseMessage httpResponseMessage = await _client.SendAsync(request)) {
                        string xmlString = await httpResponseMessage.Content.ReadAsStringAsync();
                        Console.WriteLine(httpResponseMessage.StatusCode);
                    }

                }
}
private static X509Certificate2 GetStoreCertificate(string thumbprint)
        {


            X509Store store = new X509Store("My", StoreLocation.LocalMachine);
            try
            {
                store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
                X509Certificate2Collection certificates = store.Certificates.Find(
                  X509FindType.FindByThumbprint, thumbprint, false);
                if (certificates.Count == 1)
                {
                    return certificates[0];
                }
            }
            finally
            {
                store.Close();
            }

            throw new ArgumentException(string.Format(
              "A Certificate with Thumbprint '{0}' could not be located.",
              thumbprint));
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...