2010-03-02 44 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