2010-11-09 5 views
3

Contexte:Windows Azure - initialisation de stockage Blob - Autorisation erreur

J'ai une application Azure avec un rôle Web qui est une application ASP.NET (C#), qui utilise une application de création de graphiques pour afficher les résultats de un calcul. L'application de cartographie a besoin d'un fichier XML en entrée. Pour accéder à ce fichier XML (référencé dans le JavaScript), j'utilise XDocument et les classes liées pour manipuler le fichier, puis l'enregistrer, le contrôle graphique est chargé lors de l'actualisation de la page.

Erreur:

Lorsque vous essayez de faire fonctionner (GetPermissions, créer, créer si n'existe pas, etc.) sur le récipient objet, je reçois l'erreur suivante:

serveur n'a pas réussi à authentifier la demande. Assurez-vous que la valeur de l'en-tête Autorisation est correctement formée, y compris la signature.

J'ai également essayé de créer le conteneur à l'avance en utilisant SpaceBlock, cela ne semblait pas devoir changer le résultat.

code:

Voici la fonction que je fais appel à Page_Load. L'erreur se produit sur la ligne en gras (GetPermissions):

private void InitializeStorage() 
    { 
     if (storageInitialized) 
     { 
      return; 
     } 

     lock (gate) 
     { 
      if (storageInitialized) 
      { 
       return; 
      } 

      try 
      { 
       CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSetter) => 
       { 
        configSetter(RoleEnvironment.GetConfigurationSettingValue(configName)); 
       }); 

       // read account configuration settings 
       var storageAccount = CloudStorageAccount.FromConfigurationSetting("DataConnectionString"); 

       // create blob container for images 
       blobStorage = storageAccount.CreateCloudBlobClient(); 
       CloudBlobContainer container = blobStorage.GetContainerReference("xml"); 

       // configure container for public access 
       **var permissions = container.GetPermissions();** 
       permissions.PublicAccess = BlobContainerPublicAccessType.Container; 
       container.SetPermissions(permissions); 

       CloudBlob opcBlob = container.GetBlobReference("OptionPriceChart.xml"); 
       opcBlob.DownloadToFile("opcLocal.xml"); 

      } 
      catch (WebException) 
      { 
       throw new WebException("Storage services initialization failure. " 
        + "Check your storage account configuration settings. If running locally, " 
        + "ensure that the Development Storage service is running."); 
      } 

      storageInitialized = true; 
     } 
    } 
+0

Essayez-vous de l'exécuter par rapport au stockage de développement ou à un compte cloud réel? Avez-vous vérifié votre chaîne de connexion? – knightpfhor

Répondre

1

Je ne vois rien dans votre code que vous avez fourni qui causerait le problème que vous parlez. Vous devrez vous assurer que vous avez fait un CreateIfNotExist avant d'appeler les autorisations sinon vous obtiendrez une erreur The specified container does not exist (ce que je suppose que vous faisiez avant que vous rencontriez votre problème actuel).

Comme le code semble correct, cela signifie probablement que c'est quelque chose dans votre environnement qui vous cause du chagrin, probablement la chaîne de connexion. J'ai essayé de répliquer votre problème en déconnant avec la chaîne de connexion et la seule façon que j'ai pu obtenir exactement la même erreur était d'utiliser un AccountName avec un AccountKey valide d'un compte différent. Donc, ma suggestion est de retourner sur le portail Azure, d'aller à votre service de stockage et de copier la clé d'accès primaire dans votre configuration de cloud.

+0

J'avais lu un autre article qui recommandait d'utiliser la clé secondaire au lieu du primaire. Une fois que j'ai utilisé la clé primaire, je suis passé cette erreur et à une autre! Merci. – user502339

+0

Cela semble cassé. Si une clé fonctionne et l'autre ne fonctionne pas, c'est un bug. – smarx

+0

Si tel était le cas, il serait utile d'essayer à nouveau la clé secondaire, juste pour s'assurer que ce n'était pas une erreur avec ce que vous avez copié/collé. Si ça ne marche toujours pas, alors, comme l'a fait remarquer smarx, c'est un bug donc je contacterais le support MS. Mais au moins, vous pouvez continuer à développer avec le primaire pour l'instant. – knightpfhor

Questions connexes