Acessando entidades da Tabela Azure
-
23-09-2019 - |
Pergunta
Portanto, tenho este aplicativo que precisa consultar entidades do armazenamento do Azure Tables a partir de tabelas cujo esquema não conheço.
1) Existe uma maneira de fazer isso com o wrapper Storageclient?
2) Acho que não, então tentei com a API REST e sempre recebo o 403 Proibido quando consulto as entidades.
Este é o meu código.
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(string.Format("http://{0}.table.core.windows.net/Tables('{1}')", account,query));
request.UserAgent = " Microsoft ADO.NET Data Services";
request.KeepAlive = true;
request.Method = "GET";
request.Headers.Add("x-ms-version", "2009-09-19");
request.Headers.Add("x-ms-date", string.Format("{0} GMT", DateTime.UtcNow.ToString ("ddd, dd MMM yyyy HH:mm:ss")));
request.Headers.Add("Authorization", string.Format("SharedKey {0}:{1}", account, key));
request.Accept = "application/atom+xml,application/xml";
request.Headers.Add("Accept-Charset", "UTF-8");
request.Headers.Add("DataServiceVersion", "1.0;NetFx");
request.Headers.Add("MaxDataServiceVersion", "1.0;NetFx");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Solução
Sim, você pode fazer isso. Há uma boa entrada sobre como fazer: http://social.msdn.microsoft.com/forums/en-us/windowszure/thread/481afa1b-03a9-42d9-ae79-9d5dc33b9297/
Dá um bom exemplo de código, para que não seja elaborado. Este código é praticamente o que eu uso no meu AzuretableQuery Projeto para descobrir as propriedades de uma entidade. Se você olhar para o código, verifique o GenerictableContext.cs e Genicentity.cs Aulas
Outras dicas
As tabelas do Windows Azure podem ser consultadas por meio do protocolo OData (odata.org).A maneira mais fácil é ter o PartitionKey e o RowKey da entidade que deseja obter/atualizar/mesclar/excluir.
Todos os exemplos REST estão lá (para consulta de tabelas e consulta de entidades):http://msdn.microsoft.com/en-us/library/dd179423.aspx
Meu problema inicial foi devido ao fato de que meu cabeçalho de autorização não estava certo.
Eu estava apenas adicionando a chave e, na verdade, há algumas coisas que você precisa fazer com a chave, assinar uma string e adicioná -la ao cabeçalho da autorização.
Mais informações aqui.
Então, por que marquei a resposta de Jason como válida? Porque minhas suposições estavam erradas. Existe uma maneira de consultar entidades em suas tabelas do Azure, mesmo que você não conheça o esquema de suas mesas. E o post de Jason mostrou o meu caminho.