0

따라서 Microsoft는 Azure 테이블 저장소에 진단 데이터를 보내기로 결정했습니다. 이 저장소를 쿼리하고 C# SDK를 통해 분석을 위해 다른 위치로 보내려고합니다. 수십만의 레코드를 가져 와서 쿼리 할 수는 있지만 마지막으로 보낸 연속 토큰은 항상 null 응답을 받게됩니다. 더 많은 데이터가 테이블 스토리지로 보내지더라도, 연속 토큰이 작동하지 않고 여전히 Null 연속 토큰과 Null 데이터를 가져옵니다.Azure 테이블 보관 계속

누구나 이와 같은 작업을 했습니까? 계속 토큰을 보내는 경우 Azure 테이블 데이터를 "동기화"하는 방법을 계속 유지하려면 어떻게해야합니까?

  public static List<PerfMonEntity> GetEventData(ref TableContinuationToken contToken) 
    { 
     CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["StorageConnectionString"]); 
     CloudTableClient tableClient = storageAccount.CreateCloudTableClient(); 
     CloudTable eventLogsTable = tableClient.GetTableReference("WADPerformanceCountersTable"); 
     TableQuery<PerfMonEntity> query = new TableQuery<PerfMonEntity>(); 

     var l = new List<PerfMonEntity>(); 
     var segment = eventLogsTable.ExecuteQuerySegmented(query, contToken ?? new TableContinuationToken()); 
     foreach (PerfMonEntity wadCounter in segment) 
     { 
      l.Add(wadCounter); 
     } 
     contToken = segment.ContinuationToken; 

     if (contToken == null) 
     { 
      Console.WriteLine("contToken is NULL!"); 
      return null; 
     } 

     Console.WriteLine("partkey: {0}", contToken.NextPartitionKey ?? ""); 
     Console.WriteLine("rowkey: {0}", contToken.NextRowKey ?? ""); 

     return l; 
    } 

- = - = - = - = - = - 반환 할 데이터가 더 이상 없을 때

 while (num < loop) 
     { 
      List<PerfMonEntity> eleList = AzurePerfTable.GetEventData(ref contToken); 
      if (eleList != null) 
       returnedList.AddRange(eleList); 
      else 
       num = loop; 
      num += 1; 

      if (contToken != null) 
       AZContinuationToken.SetContToken(contToken); 

      Console.WriteLine("returnedlistsize: {0}", returnedList.Count<PerfMonEntity>()); 
     } 

답변

0

존속 토큰은 널이다. null가 아닌 경우는 다음 페이지에 반환 할 추가 엔티티가 있음을 의미합니다. null을 확인하여 마지막 페이지를 검색 한 후 루프를 종료 할 때를 확인할 수 있습니다. 우리가 중지 마지막에 도착 곳에서 하나의 재시작을 수행하는 방법을

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString")); 

CloudTableClient tableClient = storageAccount.CreateCloudTableClient(); 

CloudTable eventLogsTable = tableClient.GetTableReference("WADPerformanceCountersTable"); 
TableQuery query = new TableQuery(); 

Console.WriteLine("List perf counter results in pages:"); 

TableContinuationToken token = null; 

do 
{ 
    var segment = eventLogsTable.ExecuteQuerySegmented(query, token, null, null); 

    foreach (var wadCounter in segment) 
    { 
     Console.WriteLine(wadCounter.PartitionKey); 
     Console.WriteLine(wadCounter.RowKey); 
     Console.WriteLine(wadCounter.Timestamp); 
    } 

    token = segment.ContinuationToken; 
} 
while (token != null); 
+0

구입 :

는이 라인을 따라 로직을 작성하려고? (예 :'꼬리 -f' 행동?) – ChrisF

+0

게임에서 늦었지만 다음과 같이'BlobContinuationToken'의 새 인스턴스를 만들 수 있습니다 :'BlobContinuationToken token = new BlobContinuationToken() {NextMarker = "[long_continuation_token_goes_here] "};'. 그 시점에서 요청이 시작되고 계속됩니다. –