Exporter (0) Imprimer
Développer tout

Créer un Compte de stockage

Mis à jour: avril 2014

L'opération Create Storage Account crée un nouveau compte de stockage dans Windows Azure.

La demande Create Storage Account peut être spécifiée comme suit. Remplacez <subscription-id> par votre ID d'abonnement.

 

Méthode URI de demande Version HTTP

POST

https://management.core.windows.net/<subscription-id>/services/storageservices

HTTP/1.1

Le tableau suivant décrit les en-têtes de la demande.

 

En-tête de demande Description

Content-Type

Obligatoire. Définissez cet en-tête sur la valeur application/xml.

x-ms-version

Obligatoire. Spécifie la version de l'opération à utiliser pour cette demande. La valeur de cet en-tête doit être la version 2011-06-01 ou une version ultérieure. Pour plus d'informations sur les en-têtes du suivi de version, consultez Contrôle de version du service de gestion.

Le corps de la requête présente le format suivant :

<?xml version="1.0" encoding="utf-8"?>
<CreateStorageServiceInput xmlns="http://schemas.microsoft.com/windowsazure">
  <ServiceName>name-of-storage-account</ServiceName>
  <Description>description-of-storage-account</Description>
  <Label>base64-encoded-label</Label>
  <AffinityGroup>name-of-affinity-group</AffinityGroup>
  <Location>location-of-storage-account</Location>
  <GeoReplicationEnabled>geo-replication-indicator</GeoReplicationEnabled>
  <ExtendedProperties>
    <ExtendedProperty>
      <Name>property-name</Name>
      <Value>property-value</Value>
    </ExtendedProperty>
  </ExtendedProperties>
  <SecondaryReadEnabled>secondary-read-indicator</SecondaryReadEnabled>
</CreateStorageServiceInput>

ImportantImportant
L'ordre des éléments dans le corps de la demande est très important. Si un élément est obligatoire, il doit s'afficher dans le XML dans l'ordre indiqué au-dessus.

Le tableau suivant décrit les éléments du corps de la demande :

 

Nom de l'élément

Description

Nom du service

Obligatoire. Nom du compte de stockage qui est unique dans Windows Azure. Les noms de compte de stockage doivent comprendre entre 3 et 24 caractères et utiliser uniquement des chiffres et des lettres minuscules.

Ce nom est le nom du préfixe DNS et peut être utilisé pour accéder aux objets blob, aux files d'attente, et aux tables dans le compte de stockage.

Par exemple : http://ServiceName.blob.core.windows.net/mycontainer/

Étiquette

Obligatoire. Étiquette du compte de stockage spécifiée en tant que chaîne codée en base 64. L'étiquette peut être longue de 100 caractères au maximum. L'étiquette peut être utilisée pour identifier le compte de stockage à des fins de suivi.

Description

Ce paramètre est facultatif. Description du compte de stockage. La description peut avoir une longueur de 1024 caractères au maximum.

Emplacement

Obligatoire si AffinityGroup n'est pas spécifié. Emplacement où le compte de stockage est créé.

Incluez un élément Location ou AffinityGroup dans le corps de la demande, mais pas les deux. Pour répertorier les emplacements disponibles, utilisez l'opération Liste des emplacements.

AffinityGroup

Obligatoire si Location n'est pas spécifié. Nom d'un groupe d'affinités existant dans l'abonnement spécifié.

Incluez un élément Location ou AffinityGroup dans le corps de la demande, mais pas les deux. Pour répertorier les groupes d'affinités disponibles, utilisez l'opération Liste des groupes d'affinités.

GeoReplicationEnabled

Ce paramètre est facultatif. Indique si le compte de stockage est créé avec la géo-réplication activée. Si l'élément n'est pas inclus dans le corps de la demande, la valeur par défaut est true. Si défini sur la valeur true, les données dans le compte de stockage sont répliquées entre plusieurs emplacements géographiques pour permettre la résilience en cas de perte catastrophique de service.

L'élément GeoReplicationEnabled est uniquement disponible si vous utilisez la version 2012-03-01 ou une version ultérieure. Après la version 2013-11-01, si SecondaryReadEnabled est spécifié, GeoReplicationEnabled doit également être spécifié.

Nom

Ce paramètre est facultatif. Représente le nom d'une propriété étendue du compte de stockage. Chaque propriété étendue doit avoir un nom et une valeur définis. Il peut y avoir un maximum de 50 paires nom/valeur de propriété étendue.

La longueur maximale de l'élément Nom est de 64 caractères, seuls les caractères alphanumériques et les traits de soulignement sont valides dans Nom, et le nom doit commencer par une lettre. Toute tentative d'utiliser d'autres caractères, en commençant le Nom par un caractère autre qu'une lettre, ou en entrant un nom qui est identique à celui d'une autre propriété étendue détenue par le même compte de stockage, provoque une erreur de code d'état 400 (erreur de mauvaise demande).

L'élément Name est uniquement disponible si vous utilisez la version 2012-03-01 ou une version ultérieure.

Valeur

Ce paramètre est facultatif. Représente la valeur d'une propriété étendue du compte de stockage. Chaque propriété étendue doit avoir un nom et une valeur définis. Vous pouvez avoir 50 paires nom/valeur de propriété étendue au maximum, et chaque valeur de propriété étendue doit avoir une taille maximale de 255 caractères.

L'élément Value est uniquement disponible si vous utilisez la version 2012-03-01 ou une version ultérieure.

SecondaryReadEnabled

Ce paramètre est facultatif. Indique que la lecture secondaire est activée pour le compte de stockage.

Les valeurs possibles sont les suivantes :

  • true

  • false

L'élément SecondaryReadEnabled est uniquement disponible si vous utilisez la version 2013-11-01 ou une version ultérieure. Après la version 2013-11-01, si SecondaryReadEnabled est spécifié, GeoReplicationEnabled doit également être spécifié.

La réponse inclut un code d'état HTTP, un ensemble d'en-têtes de réponse et un corps de réponse.

Un Create Storage Account est une opération asynchrone qui retourne toujours un code d'état 202 (Accepté). Pour déterminer le code d'état de l'opération une fois qu'elle est terminée, appelez Obtenir l'état de l'opération. Le code d'état est incorporé dans la réponse pour cette opération ; si l'opération réussit, il s'agit du code d'état 200 (OK). Pour plus d'informations sur les codes d'état, consultez Codes d'état et d'erreur de la gestion des services.

La réponse de l'opération inclut les en-têtes suivants. La réponse peut aussi inclure des en-têtes HTTP standard supplémentaires. Tous les en-têtes standard sont conformes à la spécification du protocole HTTP/1.1.

 

En-tête de réponse Description

x-ms-request-id

Valeur qui identifie de façon unique une demande effectuée au service de gestion. Pour une opération asynchrone, vous pouvez interroger l'état de l'opération Get avec la valeur de l'en-tête pour déterminer si l'opération est terminée, a échoué, ou est encore en cours. Pour plus d'informations, consultez Suivre les demandes de gestion des services asynchrones.

Tout certificat de gestion associé à l'abonnement spécifié par <subscription-id> peut être utilisé pour authentifier cette opération. Pour plus de détails, consultez la rubrique Authentification des demandes de gestion des services.

Créez des comptes de stockage par programme avec l'opération Créer un compte de stockage, dans les limites de disponibilité de votre abonnement. La limite initiale du nombre de comptes de stockage d'un abonnement est 20. L'opération retourne immédiatement un ID de demande, tandis que la création du compte de stockage est exécutée de façon asynchrone par Windows Azure, car le déploiement d'un nouveau compte de stockage peut prendre plusieurs minutes. Pour déterminer à quel moment l'opération de création du compte de stockage s'est achevée, vous pouvez interroger l'opération Obtenir l'état de l'opération avec l'ID de demande. Cela retourne un corps XML avec un élément Operation contenant un élément Status qui a une valeur InProgress, Failed ou Succeeded, selon l'état de création du compte de stockage. Si vous continuez d'interroger jusqu'à ce que l'état soit Failed ou Succeeded, l'élément Operation contiendra le code d'état dans l'élément StatusCode, et les opérations en échec contiendront des informations d'erreur supplémentaires dans l'élément Error. Pour plus d'informations, consultez Obtenir l'état de l'opération.

Si la valeur de x-ms-version est la version 2012-03-01 ou une version ultérieure, un compte de stockage ne peut pas être créé dans Anywhere US, Anywhere Europe, ni les régions Anywhere Asia, qui sont désormais déconseillées, à moins d'utiliser un groupe d'affinités préexistant défini sur l'un de ces emplacements.

Cet exemple de programme de console crée un nouveau compte de stockage, définissant la description, l'étiquette, l'emplacement, et l'état de géo-réplication avec l'opération Créer un compte de stockage, puis interroge l'opération Obtenir l'état de l'opération avec l'ID de demande retourné de l'opération Créer un compte de stockage jusqu'à ce que l'appel ait réussi, ou échoué, ou jusqu'à ce que l'interrogation ait expiré. Enfin, il appelle Obtenir les propriétés du compte de stockage pour afficher les propriétés du nouveau compte de stockage. Définissez la valeur pour l'en-tête x-ms-version dans la chaîne Version, votre identificateur d'abonnement dans SubscriptionId, votre empreinte numérique de certificat de gestion dans Thumbprint, et définissez ServiceName sur un nom de compte de stockage unique pour exécuter l'exemple.

namespace Microsoft.WindowsAzure.ServiceManagementRESTAPI.Samples
{
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Security.Cryptography.X509Certificates;
    using System.Threading;
    using System.Xml;
    using System.Xml.Linq;
 
    public class Program
    {
        // Set these constants with your values to run the sample.
        private const string Version = "2011-12-01";
        private const string Thumbprint = "management-certificate-thumbprint";
        private const string SubscriptionId = "subscription-identifier";
        private const string ServiceName = "unique-storage-account-name";
 
        // This is the common namespace for all Service Management REST API XML data.
        private static XNamespace wa = "http://schemas.microsoft.com/windowsazure";
 
        /// <summary>
        /// The operation status values from PollGetOperationStatus.
        /// </summary>
        private enum OperationStatus
        {
            InProgress,
            Failed,
            Succeeded,
            TimedOut
        }
 
        /// <summary>
        /// Gets or sets the certificate that matches the Thumbprint value.
        /// </summary>
        private static X509Certificate2 Certificate { getset; }
 
        static void Main(string[] args)
        {
            try
            {
                Certificate = GetStoreCertificate(Thumbprint);
 
                // Create the new storage account with the following values:
                string description = "Description for my example storage account";
                string label = "My example storage account label";
                string location = "North Central US";
                bool? enableGeoReplication = true;
                string requestId = CreateStorageAccount(
                    ServiceName, 
                    description, 
                    label, 
                    null, 
                    location, 
                    enableGeoReplication);
                Console.WriteLine(
                    "Called Create Storage Account operation: requestId {0}",
                    requestId);
 
                // Loop on Get Operation Status for result of storage creation
                OperationResult result = PollGetOperationStatus(
                    requestId, 
                    pollIntervalSeconds: 20,
                    timeoutSeconds: 180);
                switch (result.Status)
                {
                    case OperationStatus.TimedOut:
                        Console.WriteLine(
                            "Poll of Get Operation Status timed out: " +
                            "Operation {0} is still in progress after {1} seconds.",
                            requestId, 
                            (int)result.RunningTime.TotalSeconds);
                        break;
 
                    case OperationStatus.Failed:
                        Console.WriteLine(
                            "Failed: Operation {0} failed after " + 
                            "{1} seconds with status {2} ({3}) - {4}: {5}",
                            requestId, 
                            (int)result.RunningTime.TotalSeconds,
                            (int)result.StatusCode, 
                            result.StatusCode, 
                            result.Code, 
                            result.Message);
                        break;
 
                    case OperationStatus.Succeeded:
                        Console.WriteLine(
                            "Succeeded: Operation {0} completed " +
                            "after {1} seconds with status {2} ({3})",
                            requestId, 
                            (int)result.RunningTime.TotalSeconds, 
                            (int)result.StatusCode, 
                            result.StatusCode);
                        break;
                }
 
                // Display the property values for the new storage account.
                // Convert the Label property to a readable value for display.
                XElement updatedProperties =
                    GetStorageAccountProperties(ServiceName);
                XElement labelElement = updatedProperties.Descendants(wa + "Label").First();
                labelElement.Value = labelElement.Value.FromBase64();
                Console.WriteLine(
                    "New Storage Account Properties for {0}:{1}{2}",
                    ServiceName,
                    Environment.NewLine,
                    updatedProperties.ToString(SaveOptions.OmitDuplicateNamespaces));
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception caught in Main:");
                Console.WriteLine(ex.Message);
            }
 
            Console.Write("Press any key to continue:");
            Console.ReadKey();
        }
 
        /// <summary>
        /// Calls the Get Storage Account Properties operation in the Service 
        /// Management REST API for the specified subscription and storage account 
        /// name and returns the StorageService XML element from the response.
        /// </summary>
        /// <param name="serviceName">The name of the storage account.</param>
        /// <returns>The StorageService XML element from the response.</returns>
        private static XElement GetStorageAccountProperties(
            string serviceName)
        {
            string uriFormat = "https://management.core.windows.net/{0}" +
                "/services/storageservices/{1}";
            Uri uri = new Uri(String.Format(uriFormat, SubscriptionId, serviceName));
            XDocument responseBody;
            InvokeRequest(uri, "GET", HttpStatusCode.OK, nullout responseBody);
            return responseBody.Element(wa + "StorageService");
        }
 
        /// <summary>
        /// Calls the Create Storage Account operation in the Service Management 
        /// REST API for the specified subscription, storage account name, 
        /// description, label, location or affinity group, and geo-replication 
        /// enabled setting.
        /// </summary>
        /// <param name="serviceName">The name of the storage account to update.</param>
        /// <param name="description">The new description for the storage account.</param>
        /// <param name="label">The new label for the storage account.</param>
        /// <param name="affinityGroup">The affinity group name, or null to use a location.</param>
        /// <param name="location">The location name, or null to use an affinity group.</param>
        /// <param name="geoReplicationEnabled">The new geo-replication setting, if applicable. 
        /// This optional parameter defaults to null.</param>
        /// <returns>The requestId for the operation.</returns>
        private static string CreateStorageAccount(
            string serviceName,
            string description,
            string label,
            string affinityGroup,
            string location,
            bool? geoReplicationEnabled = null)
        {
            string uriFormat = "https://management.core.windows.net/{0}" +
                "/services/storageservices";
            Uri uri = new Uri(String.Format(uriFormat, SubscriptionId));
 
            // Location and Affinity Group are mutually exclusive. 
            // Use the location if it isn't null or empty.
            XElement locationOrAffinityGroup = String.IsNullOrEmpty(location) ?
                new XElement(wa + "AffinityGroup", affinityGroup) :
                new XElement(wa + "Location", location);
 
            // Create the request XML document
            XDocument requestBody = new XDocument(
                new XDeclaration("1.0""UTF-8""no"),
                new XElement(
                    wa + "CreateStorageServiceInput",
                    new XElement(wa + "ServiceName", serviceName),
                    new XElement(wa + "Description", description),
                    new XElement(wa + "Label", label.ToBase64()),
                    locationOrAffinityGroup));
 
            // Add the GeoReplicationEnabled element if the version supports it.
            if ((geoReplicationEnabled != null) &&
                (String.CompareOrdinal(Version, "2011-12-01") >= 0))
            {
                requestBody.Element(
                    wa + "CreateStorageServiceInput").Add(
                        new XElement(
                            wa + "GeoReplicationEnabled",
                            geoReplicationEnabled.ToString().ToLowerInvariant()));
            }
 
            XDocument responseBody;
            return InvokeRequest(
                uri, "POST", HttpStatusCode.Accepted, requestBody, out responseBody);
        }
 
        /// <summary>
        /// Calls the Get Operation Status operation in the Service 
        /// Management REST API for the specified subscription and requestId 
        /// and returns the Operation XML element from the response.
        /// </summary>
        /// <param name="requestId">The requestId of the operation to track.</param>
        /// <returns>The Operation XML element from the response.</returns>
        private static XElement GetOperationStatus(
            string requestId)
        {
            string uriFormat = "https://management.core.windows.net/{0}" +
                "/operations/{1}";
            Uri uri = new Uri(String.Format(uriFormat, SubscriptionId, requestId));
            XDocument responseBody;
            InvokeRequest(uri, "GET", HttpStatusCode.OK, nullout responseBody);
            return responseBody.Element(wa + "Operation");
        }
 
        /// <summary>
        /// The results from PollGetOperationStatus are passed in this struct.
        /// </summary>
        private struct OperationResult
        {
            // The status: InProgress, Failed, Succeeded, or TimedOut.
            public OperationStatus Status { getset; }
 
            // The http status code of the requestId operation, if any.
            public HttpStatusCode StatusCode { getset; }
 
            // The approximate running time for PollGetOperationStatus.
            public TimeSpan RunningTime { getset; }
 
            // The error code for the failed operation.
            public string Code { getset; }
 
            // The message for the failed operation.
            public string Message { getset; }
        }
 
        /// <summary>
        /// Polls Get Operation Status for the operation specified by requestId
        /// every pollIntervalSeconds until timeoutSeconds have passed or the
        /// operation has returned a Failed or Succeeded status. 
        /// </summary>
        /// <param name="requestId">The requestId of the operation to get status for.</param>
        /// <param name="pollIntervalSeconds">The interval between calls to Get Operation Status.</param>
        /// <param name="timeoutSeconds">The maximum number of seconds to poll.</param>
        /// <returns>An OperationResult structure with status or error information.</returns>
        private static OperationResult PollGetOperationStatus(
            string requestId,
            int pollIntervalSeconds,
            int timeoutSeconds)
        {
            OperationResult result = new OperationResult();
            DateTime beginPollTime = DateTime.UtcNow;
            TimeSpan pollInterval = new TimeSpan(0, 0, pollIntervalSeconds);
            DateTime endPollTime = beginPollTime + new TimeSpan(0, 0, timeoutSeconds);
 
            bool done = false;
            while (!done)
            {
                XElement operation = GetOperationStatus(requestId);
                result.RunningTime = DateTime.UtcNow - beginPollTime;
                try
                {
                    // Turn the Status string into an OperationStatus value
                    result.Status = (OperationStatus)Enum.Parse(
                        typeof(OperationStatus),
                        operation.Element(wa + "Status").Value);
                }
                catch (Exception)
                {
                    throw new ApplicationException(string.Format(
                        "Get Operation Status {0} returned unexpected status: {1}{2}",
                        requestId,
                        Environment.NewLine,
                        operation.ToString(SaveOptions.OmitDuplicateNamespaces)));
                }
 
                switch (result.Status)
                {
                    case OperationStatus.InProgress:
                        Console.WriteLine(
                            "In progress for {0} seconds", 
                            (int)result.RunningTime.TotalSeconds);
                        Thread.Sleep((int)pollInterval.TotalMilliseconds);
                        break;
 
                    case OperationStatus.Failed:
                        result.StatusCode = (HttpStatusCode)Convert.ToInt32(
                            operation.Element(wa + "HttpStatusCode").Value);
                        XElement error = operation.Element(wa + "Error");
                        result.Code = error.Element(wa + "Code").Value;
                        result.Message = error.Element(wa + "Message").Value;
                        done = true;
                        break;
 
                    case OperationStatus.Succeeded:
                        result.StatusCode = (HttpStatusCode)Convert.ToInt32(
                            operation.Element(wa + "HttpStatusCode").Value);
                        done = true;
                        break;
                }
 
                if (!done && DateTime.UtcNow > endPollTime)
                {
                    result.Status = OperationStatus.TimedOut;
                    done = true;
                }
            }
 
            return result;
        }
 
        /// <summary>
        /// Gets the certificate matching the thumbprint from the local store.
        /// Throws an ArgumentException if a matching certificate is not found.
        /// </summary>
        /// <param name="thumbprint">The thumbprint of the certificate to find.</param>
        /// <returns>The certificate with the specified thumbprint.</returns>
        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));
        }
 
        /// <summary>
        /// A helper function to invoke a Service Management REST API operation.
        /// Throws an ApplicationException on unexpected status code results.
        /// </summary>
        /// <param name="uri">The URI of the operation to invoke using a web request.</param>
        /// <param name="method">The method of the web request, GET, PUT, POST, or DELETE.</param>
        /// <param name="expectedCode">The expected status code.</param>
        /// <param name="requestBody">The XML body to send with the web request. Use null to send no request body.</param>
        /// <param name="responseBody">The XML body returned by the request, if any.</param>
        /// <returns>The requestId returned by the operation.</returns>
        private static string InvokeRequest(
            Uri uri,
            string method,
            HttpStatusCode expectedCode,
            XDocument requestBody,
            out XDocument responseBody)
        {
            responseBody = null;
            string requestId = String.Empty;
 
            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);
                    }
                }
            }
 
            HttpWebResponse response;
            HttpStatusCode statusCode = HttpStatusCode.Unused;
            try
            {
                response = (HttpWebResponse)request.GetResponse();
            }
            catch (WebException ex)
            {
                // GetResponse throws a WebException for 4XX and 5XX status codes
                response = (HttpWebResponse)ex.Response;
            }
 
            try
            {
                statusCode = response.StatusCode;
                if (response.ContentLength > 0)
                {
                    using (XmlReader reader = XmlReader.Create(response.GetResponseStream()))
                    {
                        responseBody = XDocument.Load(reader);
                    }
                }
 
                if (response.Headers != null)
                {
                    requestId = response.Headers["x-ms-request-id"];
                }
            }
            finally
            {
                response.Close();
            }
 
            if (!statusCode.Equals(expectedCode))
            {
                throw new ApplicationException(string.Format(
                    "Call to {0} returned an error:{1}Status Code: {2} ({3}):{1}{4}",
                    uri.ToString(),
                    Environment.NewLine,
                    (int)statusCode,
                    statusCode,
                    responseBody.ToString(SaveOptions.OmitDuplicateNamespaces)));
            }
 
            return requestId;
        }
    }
 
    /// <summary>
    /// Helpful extension methods for converting strings to and from Base-64.
    /// </summary>
    public static class StringExtensions
    {
        /// <summary>
        /// Converts a UTF-8 string to a Base-64 version of the string.
        /// </summary>
        /// <param name="s">The string to convert to Base-64.</param>
        /// <returns>The Base-64 converted string.</returns>
        public static string ToBase64(this string s)
        {
            byte[] bytes = System.Text.Encoding.UTF8.GetBytes(s);
            return Convert.ToBase64String(bytes);
        }
 
        /// <summary>
        /// Converts a Base-64 encoded string to UTF-8.
        /// </summary>
        /// <param name="s">The string to convert from Base-64.</param>
        /// <returns>The converted UTF-8 string.</returns>
        public static string FromBase64(this string s)
        {
            byte[] bytes = Convert.FromBase64String(s);
            return System.Text.Encoding.UTF8.GetString(bytes);
        }
    }
}

Cet exemple de programme génère une sortie de console similaire à ce qui suit :

Called Create Storage Account operation: requestId 8ba8bd9cdc50472892a0b3cd3659b297
In progress for 0 seconds
In progress for 20 seconds
In progress for 41 seconds
In progress for 61 seconds
In progress for 82 seconds
In progress for 103 seconds
Succeeded: Operation 8ba8bd9cdc50472892a0b3cd3659b297 completed after 123 seconds with status 200 (OK)
New Storage Account Properties for myexamplestorage1:
<StorageService xmlns="http://schemas.microsoft.com/windowsazure" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <Url>https://management.core.windows.net/01234567-89ab-cdef-0123-456789abcdef/services/storageservices/myexamplestorage1</Url>
  <ServiceName>myexamplestorage1</ServiceName>
  <StorageServiceProperties>
    <Description>Description for my example storage account</Description>
    <Location>North Central US</Location>
    <Label>My example storage account label</Label>
    <Status>Created</Status>
    <Endpoints>
      <Endpoint>http://myexamplestorage1.blob.core.windows.net/</Endpoint>
      <Endpoint>http://myexamplestorage1.queue.core.windows.net/</Endpoint>
      <Endpoint>http://myexamplestorage1.table.core.windows.net/</Endpoint>
    </Endpoints>
    <GeoReplicationEnabled>true</GeoReplicationEnabled>
    <GeoPrimaryRegion>usnorth</GeoPrimaryRegion>
    <StatusOfPrimary>Available</StatusOfPrimary>
    <GeoSecondaryRegion>ussouth</GeoSecondaryRegion>
    <StatusOfSecondary>Available</StatusOfSecondary>
  </StorageServiceProperties>
</StorageService>
Press any key to continue:

Afficher:
© 2014 Microsoft