Ответ 1
Я предполагаю, что имя используемого вами контейнера нарушает правила именования. Проверьте http://msdn.microsoft.com/en-us/library/dd135715.aspx.
Я получаю исключение каждый раз, когда я пытаюсь создать контейнер для 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:
Вы, ребята, знаете, что я делаю неправильно?
Я предполагаю, что имя используемого вами контейнера нарушает правила именования. Проверьте http://msdn.microsoft.com/en-us/library/dd135715.aspx.
У меня такое же исключение. Решение: изменить имена контейнеров в нижнем регистре.
За исключением:
CloudBlobContainer container = blobClient.GetContainerReference("Script");
container.CreateIfNotExist();
Прекрасно работает:
CloudBlobContainer container = blobClient.GetContainerReference("Script");
container.CreateIfNotExist();
В моем случае эмулятор устарел. После остановки эмулятора и установки последнего SDK проблема исчезла.
Вы можете получить последнюю версию SDK: https://azure.microsoft.com/en-us/downloads/
Это часто вызвано либо именем контейнера с буквами в верхнем регистре, либо вашим именем учетной записи службы (AccountName = в файле конфигурации) содержит буквы верхнего регистра. Это так хромает. Может кто-нибудь сказать Microsoft, что это 101 анти-шаблон. Консольная среда Azure позволяет вам ввести имя учетной записи "LameDuck", например, но вам нужно подключиться к AccountName = lameduck, или она взорвалась в вашем лице с непонятным сообщением об ошибке. Когда вы вводите LameDuck в консоли Azure, он даже не предупреждает вас, что он взорвется вам, если вы используете именно это имя. Это пустая трата нашего времени, поскольку мы, по крайней мере, ожидаем последовательных анти-шаблонов - слишком многого ожидать? Если вы не разрешаете соединения с верхним регистром, не разрешайте создавать учетные записи с именами верхнего регистра на консоли Azure! Но вы должны иметь возможность обрабатывать верхний регистр в эти дни. Jeees!
Я получил ту же ошибку. Это связано с тем, что имя моей учетной записи в строке соединения было написано с буквами в верхнем регистре.
Я даже не мог подключиться через Server Explorer в Visual Studio.
После изменения имени в в нижнем регистре он работал отлично.
Я тоже потратил часы, пытаясь разобраться в этой проблеме - я думаю, Ричард имеет право на его разглагольствование!
Существует много сообщений о имени для контейнеров, не имеющих символов верхнего регистра, и т.д. Однако я обнаружил, что имя ссылки blob также должно соответствовать. Фактически, у меня было три нарушения:
Эти сложные ошибки очень трудно отследить, если сообщения об ошибках бессмысленны. Проблема в том, что ошибка генерируется точно в той же строке кода, хотя причины могут быть разными.
Основываясь на фрагменте кода, похоже, что вы вызываете CreateBlobClient() перед инициализацией storageAccInfo. Я бы предположил, что это вызовет у вас проблемы.
Моя проблема заключалась в том, что эмулятор фактически не запускался, и я этого не осознавал. http://mhuensch.azurewebsites.net/azure-storage-wont-start/
Это не началось, потому что эмулятор использует порт 10000, и возник конфликт с этим портом.
Ссылки Blob могут содержать только символы нижнего регистра - возможно, вы сталкиваетесь с этим? Я был.