Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Некоторые операции REST выполняются в Azure асинхронно, поскольку не могут быть быстро завершены. Из этой статьи вы узнаете, как отслеживать состояние асинхронных операций, используя возвращаемые в ответе значения.
Коды состояния для асинхронных операций
Изначально асинхронная операция возвращает один из следующих кодов состояния HTTP:
- 201 Создано
- 202 (принято)
После успешного завершения операции возвращаются следующие коды:
- 200 OK;
- 204 No Content (нет содержимого).
Ответы по выполняемой операции описаны в разделе Документация по REST API.
Мониторинг состояния операции
Асинхронные операции REST возвращают значения заголовков, которые используются для определения состояния операции. Существует три значения заголовка для проверки:
-
Azure-AsyncOperation— это URL-адрес для проверки текущего состояния операции. Если операция возвращает это значение, всегда используйте его (вместо расположения) для отслеживания состояния операции. -
Location— URL-адрес для определения завершения операции. Используйте это значение только в случае, если Azure-AsyncOperation не возвращается. -
Retry-After— это количество секунд ожидания перед проверкой состояния асинхронной операции.
Однако не каждая асинхронная операция возвращает все эти значения. Например, может потребоваться оценить значение заголовка Azure-AsyncOperation для одной операции и значение заголовка Location для другой операции.
Вы извлекаете значения заголовка так же, как при извлечении любого другого значения заголовка для запроса. Например, в C#вы извлекаете значение заголовка HttpWebResponse из объекта с именем response следующего кода:
response.Headers.GetValues("Azure-AsyncOperation").GetValue(0)
Запрос и ответ с использованием Azure-AsyncOperation
Чтобы получить статус асинхронной операции, отправьте запрос GET на URL, указанный в значении заголовка Azure-AsyncOperation.
Содержимое результата этой операции содержит сведения об операции. В следующем примере показаны возможные значения, возвращаемые из операции:
{
"id": "{resource path from GET operation}",
"name": "{operation-id}",
"status" : "Succeeded | Failed | Canceled | {resource provider values}",
"startTime": "2017-01-06T20:56:36.002812+00:00",
"endTime": "2017-01-06T20:56:56.002812+00:00",
"percentComplete": {double between 0 and 100 },
"properties": {
/* Specific resource provider values for successful operations */
},
"error" : {
"code": "{error code}",
"message": "{error description}"
}
}
Возвращается только status для всех ответов. Объект ошибки возвращается в том случае, если операция находится в состоянии сбоя (Failed) или отмены (Canceled). Все остальные значения являются необязательными; Таким образом, полученный ответ может выглядеть не так, как в примере.
Значения состояния выделения ресурсов
Операции, которые создают, обновляют или удаляют ресурсы (PUT, PATCH, DELETE), обычно возвращают значение provisioningState. После завершения операции возвращается одно из следующих трех значений:
- Succeeded
- Неудача
- Отменено
Любое другое значение означает, что операция еще выполняется. Поставщик ресурсов может возвращать настраиваемое значение, указывающее его состояние. Например, вы можете получить Принято, когда запрос получен и выполняется.
Примеры запросов и ответов
Запуск виртуальной машины (202 с Azure-AsyncOperation)
В этом примере показано, как определить состояние запуска для виртуальных машин. Исходный запрос имеет следующий формат:
POST
https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Compute/virtualMachines/{vm-name}/start?api-version=2016-03-30
В ответ получен код состояния 202. Среди значений заголовка, вы видите:
Azure-AsyncOperation : https://management.azure.com/subscriptions/{subscription-id}/providers/Microsoft.Compute/locations/{region}/operations/{operation-id}?api-version=2016-03-30
Чтобы проверить состояние асинхронной операции, отправьте другой запрос на этот URL-адрес.
GET
https://management.azure.com/subscriptions/{subscription-id}/providers/Microsoft.Compute/locations/{region}/operations/{operation-id}?api-version=2016-03-30
Текст ответа содержит состояние операции:
{
"startTime": "2017-01-06T18:58:24.7596323+00:00",
"status": "InProgress",
"name": "9a062a88-e463-4697-bef2-fe039df73a02"
}
Развертывание ресурсов (201 с Azure-AsyncOperation)
В этом примере показано, как определить состояние операции развертывания для развертывания ресурсов в Azure. Исходный запрос имеет следующий формат:
PUT
https://management.azure.com/subscriptions/{subscription-id}/resourcegroups/{resource-group}/providers/microsoft.resources/deployments/{deployment-name}?api-version=2016-09-01
В ответ получен код состояния 201. Текст ответа включает следующие данные:
"provisioningState":"Accepted",
Среди значений в заголовке вы видите:
Azure-AsyncOperation: https://management.azure.com/subscriptions/{subscription-id}/resourcegroups/{resource-group}/providers/Microsoft.Resources/deployments/{deployment-name}/operationStatuses/{operation-id}?api-version=2016-09-01
Чтобы проверить состояние асинхронной операции, отправьте другой запрос на этот URL-адрес.
GET
https://management.azure.com/subscriptions/{subscription-id}/resourcegroups/{resource-group}/providers/Microsoft.Resources/deployments/{deployment-name}/operationStatuses/{operation-id}?api-version=2016-09-01
Текст ответа содержит состояние операции:
{"status":"Running"}
После завершения развертывания возвращается ответ с такими данными:
{"status":"Succeeded"}
Создание учетной записи хранения (код 202, значения Location и Retry-After)
В этом примере показано, как определить состояние операции создания для учетных записей хранения. Исходный запрос имеет следующий формат:
PUT
https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Storage/storageAccounts/{storage-name}?api-version=2016-01-01
И текст запроса содержит свойства для учетной записи хранения:
{ "location": "South Central US", "properties": {}, "sku": { "name": "Standard_LRS" }, "kind": "Storage" }
В ответ получен код состояния 202. Среди значений заголовка вы увидите следующие два значения:
Location: https://management.azure.com/subscriptions/{subscription-id}/providers/Microsoft.Storage/operations/{operation-id}?monitor=true&api-version=2016-01-01
Retry-After: 17
После ожидания количества секунд, указанного в Retry-After, проверьте состояние асинхронной операции, отправив другой запрос в этот URL-адрес.
GET
https://management.azure.com/subscriptions/{subscription-id}/providers/Microsoft.Storage/operations/{operation-id}?monitor=true&api-version=2016-01-01
Если запрос все еще выполняется, вы получите код состояния 202. Если запрос завершен, вы получите код состояния 200, а текст ответа содержит свойства созданной учетной записи хранения.
Дальнейшие действия
- Документацию по каждой операции REST см. в справочнике по REST API.
- Сведения о развертывании шаблонов с помощью REST API Resource Manager см. в статье Развертывание ресурсов с использованием шаблонов и REST API Resource Manager.