it-swarm.com.ru

Исключение при создании контейнера BLOB-объектов

Я получаю исключение каждый раз, когда пытаюсь создать контейнер для BLOB-объекта.

используя следующий код


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: 

Ребята, вы знаете, что я делаю не так?

41
Egon

Я предполагаю, что имя контейнера, которое вы используете, нарушает правила именования. Проверьте http://msdn.Microsoft.com/en-us/library/dd135715.aspx .

112
smarx

У меня такое же исключение. Решение: измените имена контейнеров на строчные.

За исключением:

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

Работает отлично:

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

В моем случае эмулятор устарел. После остановки эмулятора и установки последней версии SDK проблема исчезла.

Вы можете получить последнюю версию SDK здесь: https://Azure.Microsoft.com/en-us/downloads/

3
Talon

Это часто вызывается либо именем контейнера с заглавными буквами в нем, либо имя вашей учетной записи службы (AccountName = в файле конфигурации) содержит заглавные буквы. Это SO отстой. Может кто-нибудь сказать Microsoft, что это 101 анти-паттерн. Консольная среда Azure позволяет вам вводить имя учетной записи, например, «LameDuck», но вам нужно подключиться с помощью AccountName = lameduck, или оно взорвется вам лицом с непонятным сообщением об ошибке. Когда вы вводите LameDuck в консоли Azure, он даже не предупреждает вас, что он взорвется вам в лицо, если вы будете использовать именно это имя. Это пустая трата НАШЕГО времени, так как мы, по крайней мере, ожидаем последовательных анти-паттернов - слишком много, чтобы ожидать? Если вы не разрешаете подключения в верхнем регистре, не разрешайте создавать учетные записи с именами в верхнем регистре в консоли Azure! Но вы должны быть в состоянии обрабатывать заглавные буквы в эти дни. Jeees!

2
Richard

Я тоже часами пытался разобраться с этой проблемой - я думаю, что Ричард имеет право на свою напыщенную речь! 

Есть много сообщений об имени для контейнеров, не имеющих заглавных букв и т.д. Однако я обнаружил, что ссылочное имя большого двоичного объекта также должно соответствовать. На самом деле у меня было три нарушения:

  1. Как и у Ричарда, у меня были прописные буквы в имени моей учетной записи в файле конфигурации.
  2. У меня были заглавные буквы в имени контейнера.
  3. У меня был пробел в названии ссылки BLOB.

Эти составные ошибки очень трудно отследить, если сообщения об ошибках не имеют смысла. Проблема в том, что ошибка выдается в одной и той же строке кода, даже если причины могут быть разными.

2
Simon Poulton

Я получил точно такую ​​же ошибку. Это было связано с тем, что имя моей учетной записи в строке подключения было написано заглавными буквами

Я даже не мог подключиться через Server Explorer в Visual Studio.

После изменения названия на строчные буквы он работал отлично.

2
Jonas Stensved

В моем случае я обнаружил, что эмулятор хранилища должен быть обновлен, и понял, что перехватывает исключение StorageException и проверяет свойство RequestInformation, которое, в свою очередь, имеет другое строковое свойство с именем HttpStatusMessage. Это сообщение говорит:

Версия REST этого запроса не поддерживается в этом выпуске эмулятора хранилища. Пожалуйста, обновите эмулятор хранилища до последней версии. Обратитесь к следующему URL для получения дополнительной информации: http://go.Microsoft.com/fwlink/?LinkId=392237

0
Eugenio Miró

Ссылки на BLOB-объекты могут содержать только строчные буквы - возможно, вы сталкиваетесь с этим? Я был.

0
Jorge Aguirre

Исходя из вашего фрагмента кода, похоже, что вы вызываете CreateBlobClient () до инициализации storageAccInfo. Я полагаю, это доставит вам неприятности.

0
David Makogon

Моя проблема заключалась в том, что эмулятор на самом деле не запускался, и я этого не осознавал. http://mhuensch.azurewebsites.net/Azure-storage-wont-start/

Он не запускался, потому что эмулятор использует порт 10000 и возник конфликт с этим портом.

0
Jim W