Исключение при создании контейнера больших двоичных объектов

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

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


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: 

Вы, ребята, знаете, что я делаю неправильно?


person Egon    schedule 12.04.2010    source источник


Ответы (10)


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

person user94559    schedule 12.04.2010
comment
Все буквы в имени контейнера должны быть строчными. Спасибо! Фиксированный - person Egon; 13.04.2010
comment
Спасибо! Я застрял в этом на несколько часов. - person Steve French; 06.10.2012

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

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

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

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

CloudBlobContainer container = blobClient.GetContainerReference("script");
container.CreateIfNotExist();
person unconnected    schedule 19.03.2012
comment
Это был ответ для меня. Спасибо. - person Andrew Garrison; 11.06.2012

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

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

person Talon    schedule 12.10.2015

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

person Richard    schedule 21.05.2010
comment
пожалуйста, ушел ваш гнев посредством комментариев, а не ответов! - person Egon; 21.05.2010
comment
Мне не казалось, что это рассердило, расстроило больше, чем что-либо другое; и это правильный ответ для загрузки. Не говоря уже о хороших отзывах об антипаттернах (правда, он проповедует хору). Я немного расстроен этим, так что, думаю, я могу понять, откуда он. - person BrainSlugs83; 26.06.2012

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

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

После изменения имени на нижний регистр он работал отлично.

person Jonas Stensved    schedule 27.01.2012

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

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

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

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

person Simon Poulton    schedule 19.05.2012

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

person David Makogon    schedule 12.04.2010
comment
Я просто пропустил эту строчку. Комментарий указывает строку, где инициализируется storageAccInfo. - person Egon; 12.04.2010
comment
Извините - может я неправильно понял. Но там, где у вас есть комментарий, после вашего вызова CreateBlobClient, и он должен произойти до вызова. Не пытался быть педантичным. - person David Makogon; 12.04.2010


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

person Jorge Aguirre    schedule 22.07.2017

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

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

person Eugenio Miró    schedule 11.06.2018