Tenere traccia delle operazioni asincroneTrack asynchronous Azure operations

Alcune operazioni REST in Azure vengono eseguite in modo asincrono perché non è possibile completarle rapidamente.Some Azure REST operations run asynchronously because the operation cannot be completed quickly. In questo articolo viene descritto come tenere traccia dello stato delle operazioni asincrone tramite i valori restituiti nella risposta.This topic describes how to track the status of asynchronous operations through values returned in the response.

Codici di stato per le operazioni asincroneStatus codes for asynchronous operations

Inizialmente, un'operazione asincrona restituisce un codice di stato HTTP del tipo:An asynchronous operation initially returns an HTTP status code of either:

  • 201 (Creato) oppure201 (Created)
  • 202 (Accettato)202 (Accepted)

Quando l'operazione viene completata correttamente, viene restituito uno dei codici seguenti:When the operation successfully completes, it returns either:

  • 200 (OK)200 (OK)
  • 204 (No Content (Nessun contenuto))204 (No Content)

Consultare la documentazione dell'API REST per visualizzare le risposte dell'operazione in esecuzione.Refer to the REST API documentation to see the responses for the operation you are executing.

Monitorare lo stato dell'operazioneMonitor status of operation

Le operazioni REST asincrone restituiscono i valori di intestazione, che consentono di determinare lo stato dell'operazione.The asynchronous REST operations return header values, which you use to determine the status of the operation. Potenzialmente esistono tre valori di intestazione da esaminare:There are potentially three header values to examine:

  • Azure-AsyncOperation -URL per verificare lo stato attuale dell'operazione.Azure-AsyncOperation - URL for checking the ongoing status of the operation. Se l'operazione restituisce questo valore, usarlo sempre (al posto di Location) per tenere traccia dello stato dell'operazione.If your operation returns this value, always use it (instead of Location) to track the status of the operation.
  • Location -URL per determinare quando un'operazione è stata completata.Location - URL for determining when an operation has completed. Usare questo valore solo quando non viene restituito Azure-AsyncOperation.Use this value only when Azure-AsyncOperation is not returned.
  • Retry-After -Il numero di secondi di attesa prima di controllare lo stato dell'operazione asincrona.Retry-After - The number of seconds to wait before checking the status of the asynchronous operation.

Tuttavia, non tutte le operazioni asincrone restituiscono tutti questi valori.However, not every asynchronous operation returns all these values. Ad esempio, potrebbe essere necessario valutare il valore d'intestazione Azure-AsyncOperation per un'operazione e il valore d'intestazione Location per un'altra.For example, you may need to evaluate the Azure-AsyncOperation header value for one operation, and the Location header value for another operation.

È possibile recuperare i valori d'intestazione eseguendo le stesse operazioni necessarie per il recupero di un valore d'intestazione qualsiasi di una richiesta.You retrieve the header values as you would retrieve any header value for a request. Ad esempio, in C# il valore d'intestazione viene recuperato da un oggetto HttpWebResponse denominato response con il codice seguente:For example, in C#, you retrieve the header value from an HttpWebResponse object named response with the following code:

response.Headers.GetValues("Azure-AsyncOperation").GetValue(0)

Richiesta e risposta di Azure AsyncOperationAzure-AsyncOperation request and response

Per ottenere lo stato dell'operazione asincrona, inviare una richiesta GET all'URL nel valore d'intestazione Azure-AsyncOperation.To get the status of the asynchronous operation, send a GET request to the URL in Azure-AsyncOperation header value.

Il corpo della risposta di questa operazione contiene le informazioni sull'operazione.The body of the response from this operation contains information about the operation. L'esempio seguente mostra i possibili valori restituiti dall'operazione:The following example shows the possible values returned from the operation:

{
    "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}" 
    }
}

Solo status viene restituito per tutte le risposte.Only status is returned for all responses. L'oggetto errore viene restituito quando lo stato è Operazione non riuscita oppure Operazione annullata.The error object is returned when the status is Failed or Canceled. Tutti gli altri valori sono facoltativi, pertanto la risposta che si riceve potrebbe presentare alcune differenze rispetto all'esempio.All other values are optional; therefore, the response you receive may look different than the example.

Valori provisioningStateprovisioningState values

Le operazioni di creazione, aggiornamento o eliminazione (INSERISCI, PATCH, ELIMINA) di una risorsa restituiscono in genere un valore provisioningState.Operations that create, update, or delete (PUT, PATCH, DELETE) a resource typically return a provisioningState value. Quando un'operazione viene completata, viene restituito uno dei tre valori seguenti:When an operation has completed, one of following three values is returned:

  • Operazione riuscitaSucceeded
  • Operazione non riuscitaFailed
  • CanceledCanceled

Tutti gli altri valori indicano che l'operazione è ancora in esecuzione.All other values indicate the operation is still running. Il provider di risorse può restituire un valore personalizzato che indica lo stato.The resource provider can return a customized value that indicates its state. Ad esempio, potrebbe essere visualizzato Accettato quando la richiesta è stata ricevuta ed è in esecuzione.For example, you may receive Accepted when the request is received and running.

Esempi di richieste e risposteExample requests and responses

Avviare la macchina virtuale (202 con Azure-AsyncOperation)Start virtual machine (202 with Azure-AsyncOperation)

In questo esempio viene illustrato come determinare lo stato dell'operazione di avvio per le macchine virtuali.This example shows how to determine the status of start operation for virtual machines. La richiesta iniziale è nel formato seguente:The initial request is in the following format:

POST 
https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Compute/virtualMachines/{vm-name}/start?api-version=2016-03-30

Restituisce il codice di stato 202.It returns status code 202. Tra i valori di intestazione compare:Among the header values, you see:

Azure-AsyncOperation : https://management.azure.com/subscriptions/{subscription-id}/providers/Microsoft.Compute/locations/{region}/operations/{operation-id}?api-version=2016-03-30

Per controllare lo stato dell'operazione asincrona, inviare un'altra richiesta all'URL.To check the status of the asynchronous operation, sending another request to that URL.

GET 
https://management.azure.com/subscriptions/{subscription-id}/providers/Microsoft.Compute/locations/{region}/operations/{operation-id}?api-version=2016-03-30

Il corpo della risposta contiene lo stato dell'operazione:The response body contains the status of the operation:

{
  "startTime": "2017-01-06T18:58:24.7596323+00:00",
  "status": "InProgress",
  "name": "9a062a88-e463-4697-bef2-fe039df73a02"
}

Distribuzione delle risorse (201 con Azure-AsyncOperation)Deploy resources (201 with Azure-AsyncOperation)

In questo esempio viene illustrato come determinare lo stato dell'operazione di distribuzione per la distribuzione delle risorse in Azure.This example shows how to determine the status of deployments operation for deploying resources to Azure. La richiesta iniziale è nel formato seguente:The initial request is in the following format:

PUT
https://management.azure.com/subscriptions/{subscription-id}/resourcegroups/{resource-group}/providers/microsoft.resources/deployments/{deployment-name}?api-version=2016-09-01

Restituisce il codice di stato 201.It returns status code 201. Il corpo della risposta include:The body of the response includes:

"provisioningState":"Accepted",

Tra i valori di intestazione compare:Among the header values, you see:

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

Per controllare lo stato dell'operazione asincrona, inviare un'altra richiesta all'URL.To check the status of the asynchronous operation, sending another request to that 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

Il corpo della risposta contiene lo stato dell'operazione:The response body contains the status of the operation:

{"status":"Running"}

Al termine della distribuzione, la risposta contiene:When the deployment is finished, the response contains:

{"status":"Succeeded"}

Creazione di un account di archiviazione (202 con Location e Retry-After)Create storage account (202 with Location and Retry-After)

In questo esempio viene illustrato come determinare lo stato dell'operazione di creazione per gli account di archiviazione.This example shows how to determine the status of the create operation for storage accounts. La richiesta iniziale è nel formato seguente:The initial request is in the following format:

PUT
https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Storage/storageAccounts/{storage-name}?api-version=2016-01-01

Il corpo della richiesta contiene le proprietà dell'account di archiviazione:And the request body contains properties for the storage account:

{ "location": "South Central US", "properties": {}, "sku": { "name": "Standard_LRS" }, "kind": "Storage" }

Restituisce il codice di stato 202.It returns status code 202. Tra i valori di intestazione, vengono visualizzati i due valori seguenti:Among the header values, you see the following two values:

Location: https://management.azure.com/subscriptions/{subscription-id}/providers/Microsoft.Storage/operations/{operation-id}?monitor=true&api-version=2016-01-01
Retry-After: 17

Dopo aver atteso il numero di secondi specificato in Retry-After, verificare lo stato dell'operazione asincrona inviando un'altra richiesta all'URL.After waiting for number of seconds specified in Retry-After, check the status of the asynchronous operation by sending another request to that URL.

GET 
https://management.azure.com/subscriptions/{subscription-id}/providers/Microsoft.Storage/operations/{operation-id}?monitor=true&api-version=2016-01-01

Se la richiesta è ancora in esecuzione, viene visualizzato il codice di stato 202.If the request is still running, you receive a status code 202. Se la richiesta è stata completata, viene visualizzato il codice di stato 200 e il corpo della risposta contiene le proprietà dell'account di archiviazione che è stato creato.If the request has completed, your receive a status code 200, and the body of the response contains the properties of the storage account that has been created.

Passaggi successiviNext steps