2010-04-12 35 views
40

consigo una excepción cada vez que intenta crear un contenedor para blobBlob excepción creación de contenedores

usando el siguiente código


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: 

Do Ustedes saben qué es lo que estoy haciendo mal?

Respuesta

110

Supongo que el nombre del contenedor que está utilizando infringe las reglas de denominación. Compruebe http://msdn.microsoft.com/en-us/library/dd135715.aspx.

+35

Todas las letras del nombre de un contenedor deben estar en minúscula. ¡Gracias! Corregido – Egon

+1

gracias, me quedé atrapado en esto por bastante tiempo. – rein

+0

¡Gracias! Estuve atrapado en eso por horas. –

0

Basado en el fragmento de código, parece que usted está llamando CreateBlobClient() antes de inicializar storageAccInfo. Me imagino que esto te causaría problemas.

+0

Me salté esa línea. El comentario indica la línea donde storageAccInfo está inicializado. – Egon

+0

Lo siento, tal vez no entendí bien. Pero donde tiene el comentario es "después" de su llamada a CreateBlobClient, y debe ocurrir "antes" de la llamada. No estaba tratando de ser pedante. –

2

Esto es causada a menudo por un nombre de contenedor con letras mayúsculas en el mismo, o su nombre de cuenta de servicio (AccountName = en el archivo de configuración) contiene letras mayúsculas. Esto es tan bobo. ¿Alguien puede decirle a Microsoft que estos son 101 antipatrones? El entorno de la consola Azure le permite ingresar un nombre de cuenta, "LameDuck" por ejemplo, pero tiene que conectarse con AccountName = lameduck, o le explota en la cara con un mensaje de error ininteligible. Cuando ingresas a LameDuck en la consola de Azure, ni siquiera te avisa que explotará en tu cara si usas precisamente este nombre. Esto es un desperdicio de NUESTRO tiempo, ya que al menos esperamos anti-patrones consistentes, ¿demasiado para esperar? Si no permite conexiones con mayúsculas, ¡no permita que las cuentas se creen con mayúsculas en la consola de Azure! Pero deberías poder manejar mayúsculas en estos días. Jeees!

+2

por favor, fue su ira por medio de comentarios no respuestas! – Egon

+0

No me pareció * que * me enojara, más frustrado que cualquier otra cosa; y es la respuesta correcta para arrancar. Sin mencionar los buenos comentarios sobre los antipatrones (aunque, él está predicando al coro). Estoy un poco frustrado por esto, así que creo que puedo ver de dónde viene. – BrainSlugs83

2

Tengo el mismo error exacto. Fue debido a que mi nombre de cuenta en la conexión se escribió con mayúsculas letras.

Ni siquiera podía conectarse a través continuación, el Explorador de servidores en Visual Studio.

Después de cambiar el nombre a en minúscula funcionó perfectamente.

14

Tengo la misma excepción. La solución: cambiar los nombres de los contenedores a minúsculas.

Con excepción:

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

trabaja muy bien:

CloudBlobContainer container = blobClient.GetContainerReference("script"); 
container.CreateIfNotExist(); 
+2

Esta fue la respuesta para mí. Gracias. –

2

yo también tienen horas dedicadas a tratar de resolver este problema - creo que Richard tiene derecho a su perorata!

Hay muchos mensajes sobre el nombre de contenedores no tienen caracteres en mayúscula, etc. Sin embargo, he encontrado que el nombre de referencia burbuja también debe cumplir. De hecho, tenía tres violaciónes:

  1. Como Richard que tenía letras mayúsculas en mi nombre de cuenta en el archivo de configuración.
  2. Tenía letras mayúsculas en el nombre del contenedor.
  3. Tenía un espacio en el nombre de referencia de blob.

Estos errores compuestos son muy difíciles de localizar si los mensajes de error no tienen sentido. El problema es que el error se produce exactamente en la misma línea de código, aunque las causas pueden ser diferentes.

0

Blob sólo pueden tener caracteres en minúsculas - quizás está ejecutando en esto? Yo era.