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?
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 .
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();
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/
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!
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:
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.
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é.
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
Les références de blob ne peuvent avoir que des minuscules - peut-être rencontrez-vous cela? J'étais.
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.
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.