Gotcha: Windows Azure Message Queue – 400 Bad Request

Os nomes da fila de mensagens não devem conter caracteres ilegais

Se você tentar criar um contêiner (como uma fila de mensagens) no armazenamento do Windows Azure, há uma convenção de nomenclatura estrita a seguir.

Um nome de contêiner deve ser um nome DNS válido, em conformidade com as seguintes regras de nomenclatura:

  • Os nomes dos recipientes devem começar com uma letra ou número e podem conter apenas letras, números e o caractere de traço (-).
  • Cada caractere de traço (-) deve ser imediatamente precedido e seguido por uma letra ou número; travessões consecutivos não são permitidos em nomes de contêineres.
  • Todas as letras em um nome de contêiner devem ser minúsculas.
  • Os nomes dos contêineres devem ter de 3 a 63 caracteres.

Referência: Naming and Referencing Containers, Blobs e Metadata @ MSDN

Se você não fizer isso, receberá uma exceção 400 BAD REQUEST lançada, com a mensagem de exceção Uma das entradas de solicitação está fora do intervalo. .

Este é um problema sério. É também uma regra básica de uso do Windows Azure, ao que parece.

Merda, eu perdi aquela observação importante ao aprender como aproveitar o Windows Azure.


Código de amostra.

Observe as duas constantes – uma é boa e a outra é ruim.

// Good name key :)
const string QueueNameKey = "searchqueue";

// Bad name key - notice the FULL STOP in the string text?
// const string QueueNameKey = "search.queue";

// Bad name key - notice the UPPER CASE CHARACTER in the string text?
// const string QueueNameKey = "searchQueue";

// Retrieve storage account from connection string
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
CloudConfigurationManager.GetSetting(--your connection string--));

// Create the queue client
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

// Retrieve a reference to a queue
CloudQueue queue = queueClient.GetQueueReference(queueNameKey);

// Create the queue if it doesn't already exist
queue
.CreateIfNotExists();