2010-03-02 134 views
3

所以我有这个应用程序需要从表我不知道模式的表从Azure表存储查询实体。访问Azure表实体

1)有没有一种方法可以通过Storageclient包装来实现?
2)我猜不是,所以我尝试了REST API,当我查询实体时,我总是得到403 Forbidden。

这是我的代码。

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

谁编辑我的标签:伙计!为什么只是天青石? Windows Azure非常大......并且只与存储帐户中的表有关...... – sebagomez 2010-03-02 14:06:45

+0

不幸的是,Microsoft此时没有为表存储提供REST级别的API(我已经抱怨过了,请参阅http:// vermorel .com/journal/2010/1/15/fat-entities-for-table-storage-in-lokadcloud.html),而ADO.NET客户端不是通用类型。在这一点上,我建议放弃并等到微软提供一个体面的客户端库。 – 2010-03-02 16:40:43

回答

2

是的,你可以做到。有一个很好的条目如何在:http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/481afa1b-03a9-42d9-ae79-9d5dc33b9297/

它给出了一个很好的代码示例,所以我不会详细说明它。此代码几乎是我在AzureTableQuery项目中使用的,以查找实体的属性。如果你看代码,看看GenericTableContext.csGenericEntity.cs

+0

谢谢@Jason,很棒的解决方案! – sebagomez 2010-03-06 12:35:19

0

我最初的问题是由于我的Autorization头不正确。
我刚刚添加了密钥,实际上你需要用钥匙做一些事情,签名一个字符串并将其添加到Autorization头。
更多信息here

那么,为什么我把@ Jason的答案标记为有效?因为我的假设是错误的。即使您不知道表的模式,也可以查询Azure表中的实体。杰森的帖子显示了我的方式。

0

Windows Azure表可通过OData(odata.org)协议进行查询。最简单的方法是让想要获取/更新/合并/删除的实体的PartitionKey和RowKey。

所有REST的例子是有(对表查询,查询实体): http://msdn.microsoft.com/en-us/library/dd179423.aspx