2012-02-08 88 views
3

背景 我需要一個我已在Azure ACS中註冊的所有服務標識名稱的列表。我有一個從https://myaccesscontrol.accesscontrol.windows.net/v2/mgmt/service獲得的Azure管理服務參考。對於本次討論,「myaccesscontrol」前綴是任意的。如果我理解正確,您可以使用不同的訂閱命名空間前綴並獲得相同的結果。這是Azure在訂閱時提供的服務端點。它公開了一個ManagementService接口。當我得到一個服務標識列表從ACS獲取服務標識時是否可以使用分頁

DataServiceQuery<ServiceIdentity> identities = managementService.ServiceIdentities; 

我得到一個對象,其中包含我期望的所有身份的計數。當我擴展名單時,我得到了前50名。這是一個典型的分頁響應,我期望有一個延續標記可以讓我獲得下一個「頁面」。

問題 我不能看到ManagementServiceReference.ManagementService接口如何能夠被用於獲得一個延續令牌。

討論 如何:在http://msdn.microsoft.com/en-us/library/ee358711.aspx負載分頁結果(WCF數據服務)提供了其中來自LINQ上下文QueryOperationResponse響應,可以被詢問以繼續令牌 = response.GetContinuation()的示例 的QueryOperationResponse被檢索從LINQ上下文執行()。

在我的一些Azure示例代碼中,有一些Blob,表和隊列的分頁示例,其中數據收集在ResultSegment中。 ResultSegment包含一個布爾值HasMoreResults成員,一個ResultContinuationToken ContinuationToken成員,以及接受和維護它們以支持分頁操作的方法。

我不明白如何從DataServiceQuery獲取Continuation。我沒有看到Azure公開的ManagementServiceReference.ManagementService支持分頁的服務標識列表,即使該服務顯然是分頁發送給我的結果。你能指點我的正確文章,告訴我DataServiceQuery如何處理,以獲得Continuation的方式嗎?

回答

1

使用管理服務示例項目可用here,你想會是這個樣子的:

ManagementService mgmtSvc = ManagementServiceHelper.CreateManagementServiceClient(); 
List<ServiceIdentity> serviceIdentities = new List<ServiceIdentity>(); 

// Get the first page 
var queryResponse = mgmtSvc.ServiceIdentities.Execute(); 
serviceIdentities.AddRange(queryResponse.ToList()); 

// Get the rest 
while (null != ((QueryOperationResponse)queryResponse).GetContinuation()) 
{ 
    DataServiceQueryContinuation<ServiceIdentity> continuation = 
     ((QueryOperationResponse<ServiceIdentity>)queryResponse).GetContinuation(); 
    queryResponse = mgmtSvc.Execute(continuation); 
    serviceIdentities.AddRange(queryResponse.ToList()); 
} 
+0

棒極了,謝謝。適用於我的機器。我發現類型轉換的要求有點難以理解,但我想我會習慣它。 – SkipSailors 2012-02-10 20:20:40

相關問題