web-dev-qa-db-fra.com

Exception de création de conteneur blob

Je reçois une exception chaque fois que j'essaie de créer un conteneur pour le blob

en utilisant le code suivant


CloudStorageAccount storageAccInfo;
CloudBlobClient blobStorageType;
CloudBlobContainer ContBlob;

blobStorageType = storageAccInfo.CreateCloudBlobClient();

//then I initialize storageAccInfo

ContBlob = blobStorageType.GetContainerReference(containerName);
//everything fine till here ; next line creates an exception

ContBlob.CreateIfNotExist();

Microsoft.WindowsAzure.StorageClient.StorageClientException was unhandled
  Message="One of the request inputs is out of range."
  Source="Microsoft.WindowsAzure.StorageClient"
  StackTrace:
       at Microsoft.WindowsAzure.StorageClient.Tasks.Task`1.get_Result()
       at Microsoft.WindowsAzure.StorageClient.Tasks.Task`1.ExecuteAndWait()
       at Microsoft.WindowsAzure.StorageClient.TaskImplHelper.ExecuteImplWithRetry[T](Func`2 impl, RetryPolicy policy)
       at Microsoft.WindowsAzure.StorageClient.CloudBlobContainer.CreateIfNotExist(BlobRequestOptions options)
       at Microsoft.WindowsAzure.StorageClient.CloudBlobContainer.CreateIfNotExist()
       at WebRole1.BlobFun..ctor() in C:\Users\cloud\Documents\Visual Studio 2008\Projects\CloudBlob\WebRole1\BlobFun.cs:line 58
       at WebRole1.BlobFun.calling1() in C:\Users\cloud\Documents\Visual Studio 2008\Projects\CloudBlob\WebRole1\BlobFun.cs:line 29
       at AzureBlobTester.Program.Main(String[] args) in C:\Users\cloud\Documents\Visual Studio 2008\Projects\CloudBlob\AzureBlobTester\Program.cs:line 19
       at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: System.Net.WebException
       Message="The remote server returned an error: (400) Bad Request."
       Source="System"
       StackTrace:
            at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
            at Microsoft.WindowsAzure.StorageClient.EventHelper.ProcessWebResponse(WebRequest req, IAsyncResult asyncResult, EventHandler`1 handler, Object sender)
       InnerException: 

Savez-vous ce que je fais mal?

41
Egon

Mon hypothèse est que le nom du conteneur que vous utilisez viole les règles de nommage. Vérifiez http://msdn.Microsoft.com/en-us/library/dd135715.aspx .

112
smarx

J'ai la même exception. La solution: changer les noms de conteneurs en minuscules.

Avec exception:

CloudBlobContainer container = blobClient.GetContainerReference("Script");
container.CreateIfNotExist();

Fonctionne bien:

CloudBlobContainer container = blobClient.GetContainerReference("script");
container.CreateIfNotExist();
14
unconnected

Dans mon cas, l'émulateur était obsolète. Après avoir arrêté l'émulateur et installé le dernier SDK, le problème a disparu.

Vous pouvez obtenir le dernier SDK à partir d’ici: https://Azure.Microsoft.com/en-us/downloads/

3
Talon

Cela est souvent dû à un nom de conteneur contenant des lettres majuscules ou à votre nom de compte de service (Nom du compte = dans le fichier de configuration) contenant des lettres majuscules. C'est SO boiteux. Quelqu'un peut-il dire à Microsoft qu'il s'agit de 101 anti-patterns. L’environnement de la console Azure vous permet de saisir un nom de compte, "LameDuck" par exemple, mais vous devez vous connecter avec AccountName = lameduck, sinon il vous explose avec un message d’erreur inintelligible. Lorsque vous entrez LameDuck dans la console Azure, il ne vous avertit même pas qu'il va exploser si vous utilisez précisément ce nom. C'est une perte de temps, car nous nous attendons au moins à des anti-modèles cohérents - trop attendre? Si vous n'autorisez pas les connexions en majuscules, n'autorisez pas la création de comptes avec des noms en majuscules dans la console Azure! Mais vous devriez être capable de gérer les majuscules ces jours-ci. Jeees!

2
Richard

Moi aussi, j'ai passé des heures à essayer de régler ce problème - je pense que Richard a droit à son coup de gueule! 

Il existe de nombreux articles sur le nom des conteneurs ne contenant pas de caractères majuscules, etc. Cependant, j'ai constaté que le nom de la référence blob doit également être conforme. En fait, j'ai eu trois violations:

  1. Comme Richard, j'avais des lettres majuscules dans mon nom de compte dans le fichier de configuration.
  2. J'avais des lettres majuscules dans le nom du conteneur.
  3. J'ai eu un espace dans le nom de référence blob.

Ces erreurs composées sont très difficiles à dépister si les messages d'erreur n'ont pas de sens. Le problème est que l'erreur est renvoyée sur exactement la même ligne de code, même si les causes peuvent être différentes.

2
Simon Poulton

J'ai exactement la même erreur. C'était dû à mon nom de compte dans la chaîne de connexion qui était écrite avec majuscules lettres. 

Je ne pouvais même pas me connecter via Server Explorer dans Visual Studio.

Après avoir changé le nom en minuscule cela a parfaitement fonctionné.

2
Jonas Stensved

Dans mon cas, j’ai trouvé que l’émulateur de stockage devait être mis à jour, et j’ai compris à propos de cette exception StorageException capturante et de la vérification de la propriété RequestInformation qui possédait à son tour une autre propriété de chaîne nommée HttpStatusMessage. Ce message disait:

La version REST de cette demande n'est pas prise en charge par cette version de Storage Emulator. Veuillez mettre à niveau l'émulateur de stockage vers la dernière version. Pour plus d'informations, consultez l'URL suivante: http://go.Microsoft.com/fwlink/?LinkId=392237

0
Eugenio Miró

Les références de blob ne peuvent avoir que des minuscules - peut-être rencontrez-vous cela? J'étais.

0
Jorge Aguirre

D'après l'extrait de code, il semble que vous appeliez CreateBlobClient () avant d'initialiser storageAccInfo. J'imagine que cela vous causerait des ennuis.

0
David Makogon

Mon problème était que l'émulateur n'était pas en train de démarrer et je ne l'avais pas réalisé. http://mhuensch.azurewebsites.net/Azure-storage-wont-start/

Cela ne commençait pas parce que l'émulateur utilise le port 10000 et qu'il y avait un conflit avec ce port.

0
Jim W