wake-up-neo.com

Ausnahme beim Erstellen eines Blob-Containers

Ich bekomme jedes Mal eine Ausnahme, wenn ich versuche, einen Container für den Blob zu erstellen

mit dem folgenden Code


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: 

Wisst ihr, was ich falsch mache?

41
Egon

Meine Vermutung ist, dass der Name des Containers, den Sie verwenden, gegen die Namensregeln verstößt. Überprüfen Sie http://msdn.Microsoft.com/de-de/library/dd135715.aspx .

112
smarx

Ich habe die gleiche Ausnahme. Die Lösung: Ändern Sie Containernamen in Kleinbuchstaben.

Mit Ausnahme:

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

Funktioniert gut:

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

In meinem Fall war der Emulator nicht mehr aktuell. Nachdem Sie den Emulator gestoppt und das neueste SDK installiert haben, ist das Problem behoben.

Das neueste SDK erhalten Sie hier: https://Azure.Microsoft.com/de-de/downloads/

3
Talon

Dies wird häufig durch einen Containernamen mit Großbuchstaben verursacht oder der Name Ihres Dienstkontos (AccountName = in der Konfigurationsdatei) enthält Großbuchstaben. Dies ist SO lahm. Kann jemand Microsoft sagen, dass dies 101 Anti-Patterns sind. In der Azure-Konsolenumgebung können Sie einen Kontonamen eingeben, z. B. "LameDuck". Sie müssen jedoch eine Verbindung mit AccountName = lameduck herstellen. Andernfalls wird Ihnen eine unverständliche Fehlermeldung angezeigt. Wenn Sie LameDuck in der Azure-Konsole eingeben, werden Sie nicht einmal darauf hingewiesen, dass es in Ihrem Gesicht explodieren wird, wenn Sie genau diesen Namen verwenden. Dies ist eine Verschwendung von UNSERER Zeit, da wir zumindest konsequente Antimuster erwarten - zu viel zu erwarten? Wenn Sie keine Verbindungen mit Großbuchstaben zulassen, dürfen Sie die Konten nicht mit Großbuchstabennamen in der Azure-Konsole erstellen. Aber Sie sollten heutzutage mit Großbuchstaben umgehen können. Jeees!

2
Richard

Ich habe auch stundenlang versucht, dieses Problem zu klären - ich glaube, Richard hat Anspruch auf sein Geschwätz! 

Es gibt viele Beiträge zum Namen für Container, die keine Großbuchstaben enthalten, usw. Ich habe jedoch festgestellt, dass der Blob-Referenzname ebenfalls übereinstimmen muss. Ich hatte tatsächlich drei Verstöße:

  1. Wie Richard hatte ich Großbuchstaben in meinem Kontonamen in der Konfigurationsdatei.
  2. Ich hatte Großbuchstaben im Containernamen.
  3. Ich hatte ein Leerzeichen im Blob-Referenznamen.

Diese zusammengesetzten Fehler sind sehr schwer zu finden, wenn die Fehlermeldungen bedeutungslos sind. Das Problem ist, dass der Fehler in genau derselben Codezeile ausgelöst wird, obwohl die Ursachen unterschiedlich sein können.

2
Simon Poulton

Ich habe genau den gleichen Fehler. Es war aufgrund meines Kontonamens in der Verbindungszeichenfolge mit Großbuchstaben Buchstaben geschrieben. 

Ich konnte nicht einmal über den Server Explorer in Visual Studio eine Verbindung herstellen.

Nach der Änderung des Namens in Kleinbuchstaben funktionierte es einwandfrei.

2
Jonas Stensved

In meinem Fall habe ich festgestellt, dass der Speicheremulator aktualisiert werden sollte, und mir wurde bewusst, dass diese StorageException-Ausnahme abgefangen wurde und die RequestInformation-Eigenschaft überprüft wurde, die wiederum eine andere Zeichenfolgeigenschaft namens HttpStatusMessage hatte. Diese Nachricht sagte:

Die REST-Version dieser Anforderung wird von dieser Version des Speicheremulators nicht unterstützt. Aktualisieren Sie den Speicheremulator auf die neueste Version. Weitere Informationen finden Sie unter der folgenden URL: http://go.Microsoft.com/fwlink/?LinkId=392237

0
Eugenio Miró

Blob-Referenzen können nur Kleinbuchstaben enthalten - vielleicht stoßen Sie darauf? Ich war.

0
Jorge Aguirre

Basierend auf Ihrem Code-Snippet scheint es, als würden Sie CreateBlobClient () aufrufen, bevor Sie storageAccInfo initialisieren. Ich könnte mir vorstellen, dass das Ärger verursachen würde.

0
David Makogon

Mein Problem war, dass der Emulator nicht wirklich gestartet wurde und ich hatte das nicht bemerkt. http://mhuensch.azurewebsites.net/Azure-storage-wont-start/

Es wurde nicht gestartet, da der Emulator Port 10000 verwendet und ein Konflikt mit diesem Port aufgetreten ist.

0
Jim W