Questa pagina è stata utile?
I suggerimenti relativi al contenuto di questa pagina sono importanti. Comunicaceli.
Altri suggerimenti?
1500 caratteri rimanenti
MSDN Library

Creare la distribuzione

Aggiornamento: giugno 2015

L'operazione asincrona Create Deployment carica un nuovo pacchetto del servizio e crea una nuova distribuzione negli ambienti di gestione temporanea o di produzione.

Prima di poter eseguire questa operazione, è necessario completare le attività seguenti:

La richiesta Create Deployment viene specificata come indicato di seguito. Sostituire <subscription-id> con l'ID sottoscrizione, <cloudservice-name> con il nome del servizio cloud e <deployment-slot> con staging or production.

 

Metodo URI richiesta

POST

https://management.core.windows.net/<subscription-id>/services/hostedservices/<cloudservice-name>/deploymentslots/<deployment-slot>

È necessario verificare che la richiesta effettuata al servizio di gestione sia sicura. Per altri dettagli, vedere Autenticazione di richieste di gestione dei servizi.

Nessuno.

La tabella seguente descrive le intestazioni delle richieste.

 

Intestazione della richiesta Descrizione

Content-Type

Obbligatorio. Impostare questa intestazione su application/xml.

x-ms-version

Obbligatorio. Specifica la versione dell'operazione da usare per questa richiesta. Questa intestazione deve essere impostata su 01.10.09 o una versione successiva. Per altre informazioni sulle intestazioni di controllo delle versioni, vedere Controllo delle versioni di gestione del servizio.

Il formato del corpo della richiesta è il seguente:


<?xml version="1.0" encoding="utf-8"?>
<CreateDeployment xmlns="http://schemas.microsoft.com/windowsazure">
  <Name>deployment-name</Name>
  <PackageUrl>package-url-in-blob-storage</PackageUrl>
  <Label>base64-encoded-deployment-label</Label>
  <Configuration>base64-encoded-configuration-file</Configuration>
  <StartDeployment>start-deployment</StartDeployment>
  <TreatWarningsAsError>prioritize-warnings</TreatWarningsAsError>
  <ExtendedProperties>
    <ExtendedProperty>
      <Name>property-name</Name>
      <Value>property-value</Value>
    </ExtendedProperty>
  </ExtendedProperties>
  <ExtensionConfiguration>
    <AllRoles>
      <Extension>
        <Id>identifier-of-extension</Id>
        <State>state-of-extension</State>
      </Extension>
    </AllRoles>
    <NamedRoles>
      <Role>
        <RoleName>role_name1</RoleName>
        <Extensions>
          <Extension>
            <Id>identifier-of-extension</Id>
            <State>state-of-extension</State>
          </Extension>
        </Extensions>
      </Role>
    </NamedRoles>
  </ExtensionConfiguration>
</CreateDeployment>

Nella tabella indicata di seguito vengono descritti gli elementi nel corpo della richiesta.

 

Nome elemento Descrizione

Nome

Obbligatorio. Specifica il nome della distribuzione.

PackageUrl

Obbligatorio. Specifica un URL che fa riferimento alla posizione del pacchetto del servizio nel servizio BLOB. Il pacchetto del servizio può trovarsi in un account di archiviazione nella stessa sottoscrizione o un URI della firma di accesso condiviso da qualsiasi account di archiviazione. Per altre informazioni sulle firme di accesso condiviso, vedere Delega dell'accesso con una firma di accesso condiviso.

Configurazione

Obbligatorio. Specifica il file di configurazione del servizio con codifica Base 64 per la distribuzione.

Label

Obbligatorio. Specifica un identificatore per la distribuzione con codifica Base 64. L'identificatore può contenere un massimo di 100 caratteri. È consigliabile usare un'etichetta univoca all'interno della sottoscrizione. L'etichetta può essere usata per motivi di rilevamento.

StartDeployment

Facoltativo. Indica se avviare immediatamente la distribuzione appena creata. Il valore predefinito è false.

Se false, il modello del servizio viene ancora distribuito, ma il codice non viene eseguito immediatamente. Al contrario, il servizio è Suspended fino a quando si chiama Aggiornare lo stato della distribuzione e si imposta lo stato su Running. Il servizio verrà quindi avviato. Un servizio distribuito comporta comunque addebiti, anche se è sospeso.

L'elemento StartDeployment è disponibile solo se si usa la versione 2010-04-01 o una versione successiva.

TreatWarningsAsError

Facoltativo. Indica se considerare gli avvisi di convalida del pacchetto come errori. Il valore predefinito è false. Se è impostato su true, l'operazione Created Deployment ha esito negativo in presenza di avvisi di convalida del pacchetto del servizio.

L'elemento TreatWarningsAsError è disponibile solo se si usa la versione 2011-04-01 o una versione successiva.

Nome

Facoltativo. Specifica il nome di una proprietà di distribuzione estesa. Ogni proprietà estesa deve contenere un nome e un valore definiti. È possibile avere un massimo di 25 coppie nome/valore per le proprietà estese.

La lunghezza massima dell'elemento Name è di 64 caratteri. Nel nome sono validi solo i caratteri alfanumerici e i caratteri di sottolineatura. Il nome deve iniziare con una lettera.

L'elemento Name è disponibile solo se si usa la versione 2012-03-01 o una versione successiva.

Valore

Facoltativo. Specifica il valore di una proprietà estesa del servizio cloud. Ogni proprietà estesa deve contenere un nome e un valore definiti. È possibile avere un massimo di 25 coppie nome/valore per le proprietà estese e il valore di ciascuna proprietà contiene un massimo di 255 caratteri.

L'elemento Value è disponibile solo se si usa la versione 2012-03-01 o una versione successiva.

ExtensionConfiguration

Facoltativo. Specifica un'estensione aggiunta al servizio cloud. In Azure un processo può essere eseguito come estensione di un servizio cloud. È necessario aggiungere un'estensione al servizio cloud usando Aggiungere un'estensione prima di poterla aggiungere alla distribuzione.

L'elemento ExtensionConfiguration è disponibile solo se si usa la versione 2013-03-01 o una versione successiva.

Specifica un'estensione aggiunta al servizio cloud.

 

Nome elemento Descrizione

AllRoles

Facoltativo. Specifica un elenco di estensioni applicate a tutti i ruoli in una distribuzione.

Estensione

Obbligatorio. Specifica un'estensione che deve essere distribuita in un ruolo in un servizio cloud.

NamedRoles

Facoltativo. Specifica un elenco di estensioni applicate a ruoli specifici in una distribuzione.

Specifica un'estensione che deve essere distribuita in un ruolo in un servizio cloud.

 

Nome elemento Descrizione

Id

Obbligatorio. Specifica l'identificatore dell'estensione. L'identificatore viene creato quando l'estensione viene aggiunta al servizio cloud. È possibile trovare l'identificatore di un'estensione aggiunta a un servizio cloud usando Elencare le estensioni.

Stato

Facoltativo. Specifica lo stato dell'estensione. Questo elemento si applica a estensioni configurate JSON.

I valori possibili sono:

  • Enable

  • Disable

  • Uninstall

Il valore predefinito è Enable.

L'elemento State è disponibile solo se si usa la versione 2014-06-01 o una versione successiva.

Specifica un elenco di estensioni applicate a ruoli specifici in una distribuzione.

 

Nome elemento Descrizione

Ruolo

Obbligatorio. Specifica un determinato ruolo a cui viene aggiunta l'estensione.

RoleName

Obbligatorio. Specifica il nome del ruolo.

Estensione

Obbligatorio. Specifica un'estensione che deve essere distribuita in un ruolo in un servizio cloud.

Nella risposta sono inclusi un codice di stato HTTP e un set di intestazioni per la risposta.

Un'operazione completata correttamente restituisce il codice di stato 200 (OK). Per informazioni sui codici di stato, vedere Codici di stato e di errore relativi alla gestione dei servizi.

La risposta per questa operazione include le intestazioni riportate di seguito; inoltre, possono essere incluse intestazioni HTTP standard aggiuntive. Tutte le intestazioni standard sono conformi alla specifica del protocollo HTTP/1.1.

 

Intestazione della risposta Descrizione

x-ms-request-id

Valore che identifica in modo univoco una richiesta effettuata nel servizio di gestione. Per un'operazione asincrona, è possibile chiamare Ottenere lo stato delle operazioni con il valore dell'intestazione per determinare se l'operazione è stata completata, ha avuto esito negativo o è ancora in corso.

Nell'esempio di applicazione console seguente viene illustrato come distribuire un'applicazione. Sostituire i valori di variabili seguenti:

  • Thumbprint: con l'identificazione personale di un certificato di gestione nella sottoscrizione

  • SubscriptionId: con l'identificatore di sottoscrizione ottenuto dal portale di gestione

  • ServiceName: con il nome del servizio cloud creato

  • DeploymentName: con il nome che si vuole usare per la distribuzione



    noteNota
    È possibile usare List Locations per ottenere la posizione appropriata.

  • PackageName: con il percorso nell'archiviazione BLOB del file di pacchetto

  • ConfigFile: con il nome del file di configurazione del servizio


using System;
using System.Collections.Generic;
using System.Xml.Linq;
using System.Text;
using System.Security.Cryptography.X509Certificates;
using System.Net;
using System.IO;
using System.Xml;

namespace CreateDeployment
{
  class Program
  {
    private static XNamespace wa = "http://schemas.microsoft.com/windowsazure";
    private const string Thumbprint = "certificate-thumbprint";
    private const string SubscriptionId = "identifier-of-subscription";
    private const string ServiceName = "name-of-cloud-service";
    private const string DeploymentName = "name-of-deployment-name";
    private const string PackageName = "location-of-package";
    private const string ConfigFile = "name-of-configuration-file";
    private const string Version = "2013-08-01";

    static void Main(string[] args)
    {
      // Set the certificate that matches the Thumbprint value.
      X509Certificate2 certificate = GetStoreCertificate(Thumbprint);
      
       // Create the URI for the request
      string uriFormat = "https://management.core.windows.net/{0}/" +
        "services/hostedservices/{1}/deploymentslots/production";
      Uri uri = new Uri(String.Format(uriFormat, SubscriptionId, ServiceName));
      
      // Base-64 encode the label of the deployment   
      byte[] bytes = System.Text.Encoding.UTF8.GetBytes(ServiceName);
      string base64Label = Convert.ToBase64String(bytes);

       // Create the request body
      XDocument requestBody = new XDocument(
      new XDeclaration("1.0", "UTF-8", "no"),
        new XElement(wa + "CreateDeployment",
          new XElement(wa + "Name", DeploymentName),
          new XElement(wa + "PackageUrl", PackageName),
          new XElement(wa + "Label", base64Label),
          new XElement(wa + "Configuration", ConvertFile(ConfigFile)),
          new XElement(wa + "StartDeployment", true)));

       // Submit the request and get the response
      XDocument responseBody;
      HttpWebResponse response = InvokeRequest(uri, "POST", certificate, requestBody, out responseBody);
      string requestId = String.Empty;
      if (response.Headers != null)
      {
        requestId = response.Headers["x-ms-request-id"];
      }

      if (responseBody != null)
      {
        Console.WriteLine(responseBody.ToString(SaveOptions.OmitDuplicateNamespaces));
      }
      
      XDocument statusResponse = GetStatus(requestId);
      if (statusResponse != null)
      {
        Console.WriteLine(statusResponse.ToString(SaveOptions.OmitDuplicateNamespaces));
      }
      Console.Write("Press any key to continue:");
      Console.ReadKey();
    }

    //Get the status of the request    
    private static XDocument GetStatus(string requestId)
    {
      // Set the certificate that matches the Thumbprint value.
      X509Certificate2 certificate = GetStoreCertificate(Thumbprint);
      
       // Create the URI for the request
      string uriFormat = "https://management.core.windows.net/{0}/" + "operations/" + requestId;
      Uri uri = new Uri(String.Format(uriFormat, SubscriptionId));
      HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
      request.Method = "GET";
      request.Headers.Add("x-ms-version", Version);
      request.ClientCertificates.Add(certificate);
      request.ContentType = "application/xml";

       // Submit the request and get the response
      XDocument responseBody = null;
      HttpWebResponse response;
      try
      {
        response = (HttpWebResponse)request.GetResponse();
      }
      catch (WebException ex)
      {
        response = (HttpWebResponse)ex.Response;
      }

      if (response.ContentLength > 0)
      {
        using (XmlReader reader = XmlReader.Create(response.GetResponseStream()))
        {
          responseBody = XDocument.Load(reader);
        }
      }
      response.Close();
      return responseBody;
    }
        
    // Add the request headers and get the response from the request
    private static HttpWebResponse InvokeRequest(
      Uri uri,
      string method,
      X509Certificate2 certificate,
      XDocument requestBody,
      out XDocument responseBody)
    {
      HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
      request.Method = method;
      request.Headers.Add("x-ms-version", Version);
      request.ClientCertificates.Add(certificate);
      request.ContentType = "application/xml";

      if (requestBody != null)
      {
        using (Stream requestStream = request.GetRequestStream())
        {
          using (StreamWriter streamWriter = new StreamWriter(
            requestStream, System.Text.UTF8Encoding.UTF8))
          {
            requestBody.Save(streamWriter, SaveOptions.DisableFormatting);
          }
        }
      }

      responseBody = null;
      HttpWebResponse response;
      try
      {
        response = (HttpWebResponse)request.GetResponse();
      }
      catch (WebException ex)
      {
        response = (HttpWebResponse)ex.Response;
      }

      XmlReaderSettings settings = new XmlReaderSettings();
      settings.DtdProcessing = DtdProcessing.Ignore;
      if (response.ContentLength > 0)
      {
        using (XmlReader reader = XmlReader.Create(response.GetResponseStream(), settings))
        {
          try
          {
            responseBody = XDocument.Load(reader);
          }
          catch
          {
            responseBody = null;
          }
        }
      }
      response.Close();
      return response;
    }
    
    // Base-64 encode the contents of the service configuration file.
    private static string ConvertFile(string configFileName)
    {
      string fileContents;
      string base64String = "";
      try
      {
        using (StreamReader reader = new StreamReader(
          File.Open(configFileName, System.IO.FileMode.Open, System.IO.FileAccess.Read)))
        {
          fileContents = reader.ReadToEnd();
        }
      }
      catch (System.Exception exp)
      {
        Console.WriteLine(exp.Message);
        return base64String;
      }

      // Convert the binary input into base-64 encoded output. 
      try
      {
        base64String = Convert.ToBase64String(Encoding.UTF8.GetBytes(fileContents));
        return base64String;
      }
      catch (System.ArgumentNullException)
      {
        Console.WriteLine("Binary data array is null.");
        return base64String;
      }
    }

    // Gets the certificate matching the thumbprint from the local store.
    // Throws an ArgumentException if a matching certificate is not found.
    private static X509Certificate2 GetStoreCertificate(string thumbprint)
    {
      List<StoreLocation> locations = new List<StoreLocation>
      { 
        StoreLocation.CurrentUser, 
        StoreLocation.LocalMachine
      };

      foreach (var location in locations)
      {
        X509Store store = new X509Store("My", location);
        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));
    }
  }
}

Mostra:
© 2015 Microsoft