Краткое руководство по написанию кода: создание консольного приложения, выводящего список размещенных служб Windows Azure

Платформа Windows Azure

Дата обновления: 23 марта 2011 г.

Ниже приводятся этапы создания консольного приложения, которое использует интерфейс REST API для управления службами Windows Azure. В частности, в этом образце будет использоваться операция List Hosted Services. Аналогичным образом можно вызвать и другие операции REST для управления службами.

Этот образец не развертывается в облаке Windows Azure, он лишь демонстрирует взаимодействие с возможностями управления службами Windows Azure с помощью автономного приложения.

Перед продолжением убедитесь, что соблюдены предварительные условия, перечисленные в документе Windows Azure: краткое руководство по написанию кода.

Создание приложения, использующего интерфейс REST API для управления службами

Чтобы создать приложение, использующее интерфейс REST API для управления службами, выполните следующие действия.

  1. На портале управления Windows Azure добавьте для своей подписки сертификат управления (если у вас его еще нет). Сведения о сертификатах управления и их использовании при проверке подлинности вызовов интерфейса REST API для управления службами см. в документах Инструкция: управление сертификатами управления и Проверка подлинности запросов управления службами. Обратите внимание, что сертификат управления должен содержать ключ длиной не менее 2048 бит. Существует несколько методов создания сертификата. В рамках этого раздела будет использоваться следующая команда makecert, которую можно выполнить из командной строки Visual Studio:
  2. makecert -r -pe -a sha1 -n "CN=My Azure Management Certificate" -ss My -len 2048 -sp "Microsoft Enhanced RSA and AES Cryptographic Provider" -sy 24 myazuremanagementcert.cer

С помощью этой команды makecert создается сертификат пользователя, который находится в хранилище My (личное хранилище). Сертификат содержит ключ длиной 2048 бит и также сохраняется в файл с именем myazuremanagementcert.cer. Чтобы связать сертификат с вашей подпиской, войдите на сайт https://windows.azure.com, перейдите на страницу Hosted Services, Storage Accounts, and CDN («Размещенные службы, учетные записи хранилищ и сеть доставки содержимого»), щелкните Management Certificates («Сертификаты управления»), а затем — значок Add Certificate («Добавить сертификат»). В диалоговом окне Add New Management Certificate («Добавить новый сертификат управления») выберите подписку, затем — созданный с помощью команды makecert сертификат (myazuremanagementcert.cer).

  1. Запустите Microsoft Visual Studio 2010.
  2. Выберите в меню File («Файл») команду New («Создать»), а затем — пункт Project («Проект»).
  3. В диалоговом окне New Project («Создать проект») выберите Installed Templates («Установленные шаблоны»), Visual C#, а затем щелкните Windows.
  4. Щелкните Console Application («Консольное приложение»). В раскрывающемся списке выберите .NET Framework 4. При необходимости измените поле Location: («Расположение:»), которое указывает место хранения решения. Для работы с данным образцом используйте имя проекта ServiceManagementSample. Нажмите кнопку OK («ОК»), чтобы закрыть диалоговое окно New Project («Создать проект»).
  5. В меню Project («Проект») щелкните Add Reference… («Добавить ссылку...»). На вкладке .NET диалогового окна Add Reference («Добавить ссылку») выберите System.Security и нажмите кнопку OK («ОК»).
  6. Вновь откройте диалоговое окно Add Reference («Добавить ссылку») и добавьте ссылку на System.Net.
  7. Замените содержимое файла Program.cs на следующий код.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Net;  // For HttpWebRequest and HttpWebResponse classes.
using System.Security.Cryptography.X509Certificates;  // For certificate-related classes.
using System.IO;  // For Stream classes.

namespace ServiceManagementSample
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                // X.509 certificate variables.
                X509Store certStore = null;
                X509Certificate2Collection certCollection = null;
                X509Certificate2 certificate = null;

                // Request and response variables.
                HttpWebRequest httpWebRequest = null;
                HttpWebResponse httpWebResponse = null;

                // Stream variables.
                Stream responseStream = null;
                StreamReader reader = null;

                // URI variable.
                Uri requestUri = null;

                // Specify operation to use for the service management call.
                // This sample will use the operation for listing the hosted services.
                string operation = "hostedservices";

                // The ID for the Windows Azure subscription.
                string subscriptionId = "your_subscription_id";

                // The thumbprint for the certificate. This certificate would have been
                // previously added as a management certificate within the Windows Azure management portal.
                string thumbPrint = "your_certificate_thumbprint";

                // Open the certificate store for the current user.
                certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
                certStore.Open(OpenFlags.ReadOnly);

                // Find the certificate with the specified thumbprint.
                certCollection = certStore.Certificates.Find(
                                     X509FindType.FindByThumbprint,
                                     thumbPrint,
                                     false);

                // Close the certificate store.
                certStore.Close();

                // Check to see if a matching certificate was found.
                if (0 == certCollection.Count)
                {
                    throw new Exception("No certificate found containing thumbprint " + thumbPrint);
                }

                // A matching certificate was found.
                certificate = certCollection[0];
                Console.WriteLine("Using certificate with thumbprint: " + thumbPrint);

                // Create the request.
                requestUri = new Uri("https://management.core.windows.net/"
                                     + subscriptionId 
                                     + "/services/" 
                                     + operation);

                httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(requestUri);
                
                // Add the certificate to the request.
                httpWebRequest.ClientCertificates.Add(certificate);
                
                // Specify the version information in the header.
                httpWebRequest.Headers.Add("x-ms-version", "2010-10-28");

                // Make the call using the web request.
                httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();

                // Display the web response status code.
                Console.WriteLine("Response status code: " + httpWebResponse.StatusCode);

                // Display the request ID returned by Windows Azure.
                 if (null != httpWebResponse.Headers)
                 {
                     Console.WriteLine("x-ms-request-id: "
                     + httpWebResponse.Headers["x-ms-request-id"]);
                 }

                // Parse the web response.
                responseStream = httpWebResponse.GetResponseStream();
                reader = new StreamReader(responseStream);
                // Display the raw response.
                Console.WriteLine("Response output:");
                Console.WriteLine(reader.ReadToEnd());

                // Close the resources no longer needed.
                httpWebResponse.Close(); 
                responseStream.Close(); 
                reader.Close();
            }
            catch (Exception e)
            {
             
                Console.WriteLine("Error encountered: " + e.Message);
                
                // Exit the application with exit code 1.
                System.Environment.Exit(1);
                
            }
            finally
            {
                // Exit the application.
                System.Environment.Exit(0);
            }

        }
    }
}
  • Измените значения, назначенные параметрам subscriptionId и thumbPrint, на ваш ID подписки Windows Azure и отпечаток сертификата соответственно. Оба этих значения можно узнать на портале управления Windows Azure — https://windows.azure.com. В частности, на сайте https://windows.azure.comперейдите на страницу Hosted Services, Storage Accounts, and CDN («Размещенные службы, учетные записи хранилищ и сеть доставки содержимого»), а затем щелкните Management Certificates(«Сертификаты управления»): здесь вы сможете просмотреть список сертификатов для ваших подписок. Щелкните сертификат для просмотра страницы его свойств. Ниже показана страница свойств сертификата (отпечаток сертификата и ID подписки выделены):

(Вышеуказанные значения приводятся в иллюстративных целях. Используйте значения из свойств вашего сертификата, отображаемые на веб-сайте https://windows.azure.com.)

  • Сохраните файл Program.cs.
  • В меню Debug («Отладка») выберите пункт Start Without Debugging(«Запуск без отладки»). Если нет ошибок компилирования и ошибок клиентского компьютера, программа должна успешно запуститься.

Этот образец создает экземпляр класса HttpWebRequest с переменной httpWebRequest — веб-запрос для использования в вызове интерфейса REST API для управления службами. В этом веб-запросе содержится сертификат, соответствующий одному из сертификатов управления, ранее добавленных к подписке Windows Azure. Образец позволяет найти локальный сертификат методом System.Security.Cryptography.X509Certificates.Find, выполняя поиск на основе отпечатка сертификата. Как показано на изображении выше, на портале управления Windows Azure отображается отпечаток цифровых сертификатов, упрощая его использование в коде. Назначить запросу надлежащий сертификат можно и с помощью другого метода (например, выполнив поиск сертификата на основе имени субъекта или отобразив диалоговое окно пользовательского интерфейса, с помощью которого пользователь может выбрать сертификат). Но для успешного вызова важно, чтобы сертификат был ранее загружен на портал управления Windows Azure для данной подписки. Кроме того, строкакода:

certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);

является конструктором класса System.Security.Cryptography.X509Certificates.X509Store и предписывает приложению открыть хранилище My для текущего пользователя. Вспомните, что выше при создании сертификата от имени пользователя с помощью команды makecert в качестве хранилища сертификатов выбиралось хранилище My (параметр –ss My). Если необходимо использовать сертификат из другого хранилища, можно изменить параметр StoreName, используемый конструктором X509Store. Аналогично, чтобы использовать сертификат локального компьютера вместо сертификата текущего пользователя, изменяется параметр StoreLocation в конструкторе X509Store (в частности, на значение StoreLocation.LocalMachine).

Переменная requestUri сопоставляется значениям, необходимым для операции перечисления размещенных служб согласно указаниям в статье List Hosted Services. Переменная requestUri служит для создания переменной httpWebRequest. Сертификат добавляется к переменной веб-запроса.

В заголовок добавляется значение x-ms-version, равное 2010-10-28: оно соответствует версии интерфейса REST API для управления службами Windows Azure, которая будет использоваться для выполнения операции. Сведения о значениях для параметра x-ms-version см. в статье Версии API управления службами. Остальной код служит для отправки запроса и отображения ответа. Дополнительные сведения о формате заголовка и тела ответа для данного образца см. в статье List Hosted Services.

В интерфейсе REST API для управления службами доступно множество других операций. Например, с помощью операции Create Deployment можно создать развертывание, а операция List Storage Accounts позволяет вывести список учетных записей хранилища. Операция List Hosted Services использует метод GET, который по умолчанию используется для веб-запроса, поэтому в коде указывать метод GET не требуется. Однако для других операций может потребоваться указать метод. Например, в операции Create Deployment используется метод POST, и код будет содержать следующую строку:

httpWebRequest.Method = "POST";

Еще один пример использования метода, отличного от GET, — операция Delete Certificate, которая использует метод DELETE. Обратитесь к документации для каждой операции, чтобы определить метод, необходимый для веб-запроса, а также узнать подробности о форматах запроса и ответа. Дополнительные сведения о доступных операциях см. в статье Справочное руководство по интерфейсу REST API для управления службами Windows Azure.

Сведения о кодах ошибок, возвращаемых API управления службами, см. в документе Коды состояния и ошибок управления службами.

См. также

Другие ресурсы

Справочное руководство по интерфейсу REST API для управления службами Windows Azure