sebagomez
sebagomez

Reputation: 9609

Accessing Azure Table entities

So I have this app which needs to query entities from the Azure Tables storage from tables I don't know the schema of.

1) Is there a way I can do that with the Storageclient wrapper?
2) I'm guessing no, so I tried with the REST API and I always get the 403 Forbidden when I query for the entities.

This is my code.

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();

Upvotes: 3

Views: 1779

Answers (3)

sebagomez
sebagomez

Reputation: 9609

My initial problem was due to the fact that my Autorization header was not right.
I was just adding the key and there's actually a few thing you need to do with the key, sign a string and add that to the Autorization header.
More info here.

So why did I mark @Jason's answer as valid? Because my assumptions were wrong. There is a way to query entities in your Azure Tables even if you don't know the schema of your tables. And Jason's post showed my the way.

Upvotes: 0

Philippe Lavoie
Philippe Lavoie

Reputation: 2593

Windows Azure Tables are queryable via OData (odata.org) protocol. The easiest way is to have the PartitionKey and the RowKey of the entity who want to get/update/merge/delete.

All REST examples are there (for tables query and entities query): http://msdn.microsoft.com/en-us/library/dd179423.aspx

Upvotes: 0

Jason Haley
Jason Haley

Reputation: 3800

Yes, you can do it. There is a good entry on how to at: http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/481afa1b-03a9-42d9-ae79-9d5dc33b9297/

It gives a good code example so I won't elaborate on it. This code is pretty much what I use in my AzureTableQuery project to find out the properties of an entity. If you look at the code, check out the GenericTableContext.cs and GenericEntity.cs classes

Upvotes: 2

Related Questions