2017-11-29 3 views
0

。Azureストレージクライアントライブラリを使用してサーバーからデータを取得する方法。azureテーブルで継続トークンを使用する方法Rest APIを使用する

私のエンティティは、私が

https://docs.microsoft.com/en-us/rest/api/storageservices/Query-Entities?redirectedfrom=MSDN]これを参照し、それはレスポンスヘッダのX-MS-継続NextPartitionKeyに& X-MS-継続NextRowKey

を与える一度&で1000件のレコードを取得している以上10000件のレコードが&が含まれています

しかし、時間がレストAPI

を使用して連続レコードを取得するために横にそれらのヘッダーを使用する方法を理解していませんでした0
string storageAccount = "MyAccount"; 
string accessKey = "MYAccessKey"; 
string TableName = "TableName"; 
string uri = @"https://" + storageAccount + ".table.core.windows.net/" + TableName + "?$top=100"; 
// Web request 
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri); 
request.Method = "GET"; 
request.ContentType = "application/json"; 
request.Accept = "application/json;odata=nometadata"; 
request.Headers["x-ms-date"] = DateTime.UtcNow.ToString("R", System.Globalization.CultureInfo.InvariantCulture); 
request.Headers["x-ms-version"] = "2015-04-05";   
string stringToSign = request.Headers["x-ms-date"] + "\n";  
stringToSign += "/" + storageAccount + "/" + TableName; 
System.Security.Cryptography.HMACSHA256 hasher = new System.Security.Cryptography.HMACSHA256(Convert.FromBase64String(accessKey)); 
string strAuthorization = "SharedKeyLite " + storageAccount + ":" + System.Convert.ToBase64String(hasher.ComputeHash(System.Text.Encoding.UTF8.GetBytes(stringToSign))); 


request.Headers["Authorization"] = strAuthorization; 

Task<WebResponse> response = request.GetResponseAsync(); 
HttpWebResponse responseresult = (HttpWebResponse)response.Result; 

答えて

0

あなたは実際にすべてのリクエストを手動で書きたいと思っていますか?非常にエラーが発生しやすいように見えます。 WindowsAzure.Storage NuGetパッケージを使用すると、これをラップする多くの機能が得られます。継続トークンを使用することは容易であり:Microsoft Docsからコピー

例:

//List blobs to the console window, with paging. 
Console.WriteLine("List blobs in pages:"); 

int i = 0; 
BlobContinuationToken continuationToken = null; 
BlobResultSegment resultSegment = null; 

//Call ListBlobsSegmentedAsync and enumerate the result segment returned, while the continuation token is non-null. 
//When the continuation token is null, the last page has been returned and execution can exit the loop. 
do 
{ 
    //This overload allows control of the page size. You can return all remaining results by passing null for the maxResults parameter, 
    //or by calling a different overload. 
    resultSegment = await container.ListBlobsSegmentedAsync("", true, BlobListingDetails.All, 10, continuationToken, null, null); 
    if (resultSegment.Results.Count<IListBlobItem>() > 0) { Console.WriteLine("Page {0}:", ++i); } 
    foreach (var blobItem in resultSegment.Results) 
    { 
     Console.WriteLine("\t{0}", blobItem.StorageUri.PrimaryUri); 
    } 
    Console.WriteLine(); 

    //Get the continuation token. 
    continuationToken = resultSegment.ContinuationToken; 
} 
while (continuationToken != null); 

私たちは、これらのマイクロソフトNuGetパッケージで素晴らしい経験をしたし、非常にそれらを使用することをお勧めします。

+0

このように試してみましたが、問題なく動作していますが、API呼び出しを使用して同じことを行う必要があります – champ

+0

https://docs.microsoft.com/en-us/rest/api/storageservices/query-timeoutヘッダーからキーを読み取ってURLパラメータとして渡すだけです(**サンプルレスポンスヘッダーと後続のリクエスト**を参照してください) – thmshd

+0

また、次のヒントとして、NuGetライブラリは内部的にはREST APIを使用します。ライブラリを使用して何かが期待どおりに機能している場合は、like_Fiddler_ツールを使用してHTTPリクエストを監視できます。後続の呼び出しを検査し、構造化の仕組みを理解できるはずです – thmshd

関連する問題