【问题标题】:WorkItemStore.Query("YourQuery") Getting Error when fetching data from TFS in .Net c#WorkItemStore.Query("YourQuery") 在 .Net c# 中从 TFS 获取数据时出错
【发布时间】:2018-01-04 04:22:45
【问题描述】:

当我使用以下代码从 VSTF 服务器获取数据时遇到了这个问题。 你能帮我如何扩展它的集合大小或其他东西以实现更多记录。

Uri tfsUri = new Uri(uri);
 TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(tfsUri, tfsCredential);
WorkItemStore workItemStore = new WorkItemStore(tfs);
var query = workItemStore.Query(projectquery);

此代码的最后一行出现错误。请遵循以下错误:

处理团队项目“[MyProject]”时发生错误 处理团队项目“[MyProject]”:VS402337:工作数量 返回的项目超过 50000 的大小限制。将查询更改为 返回更少的项目。 Microsoft.TeamFoundation.WorkItemTracking.Client.VerbatimMessageException: VS402337:返回的工作项数量超过了大小限制 50000. 更改查询以返回更少的项目。 ---> System.Web.Services.Protocols.SoapException: VS402337: 数量 返回的工作项超过了 50000 的大小限制。更改查询 退回更少的物品。在 Microsoft.TeamFoundation.WorkItemTracking.Proxy.RetryHandler.HandleSoapException(SoapException 座位 Microsoft.TeamFoundation.WorkItemTracking.Proxy.WorkItemServer.QueryWorkitemCount(字符串 requestId, XmlElement psQuery, Boolean useMaster, Int32& count, DateTime& asOfDate, MetadataTableHaveEntry[] metadataHave, String& dbStamp、IMetadataRowSets 和元数据)在 Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore.QueryWorkItemCount(字符串 requestid, XmlElement queryXml, DateTime& asof) --- 内部结束 异常堆栈跟踪 --- 在 Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore.QueryWorkItemCount(字符串 requestid, XmlElement queryXml, DateTime& asof) 在 Microsoft.TeamFoundation.WorkItemTracking.Client.Query.RunCountQuery(字符串 requestId) 在 Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore.QueryCount(字符串 wiql,字典上下文)在 TeamProjectManager.Modules.WorkItemConfiguration.WorkItemTypes.WorkItemTypesViewModel.c__DisplayClass82_0.b__0(Object 发件人,DoWorkEventArgs e) 在 C:\Users\jelled\Desktop\Code\TfsTeamProjectManager\Repo\TeamProjectManager.Modules.WorkItemConfiguration\WorkItemTypes\WorkItemTypesViewModel.cs:line 169 检索到 22 个工作项类型

【问题讨论】:

    标签: c# .net visual-studio tfs


    【解决方案1】:

    你有两种方法可以解决这个问题:

    • 添加查询条件以返回更少的项目,就像错误一样 提到的消息。

      例如:

      SELECT * FROM WorkItems WHERE [System.TeamProject] = @project AND [System.State] = ‘Active' AND [System.AssignedTo] = ‘joselugo'

    • 分成几组分别返回。有一个用于检索所有工作项类型列表的示例供您参考:(有关详细信息,请参阅Github。)

      // There is a VSO limit of a query returning 20,000 results. Split into groups of 10,000 items maximum. var results = new List<WorkItemReference>(); var counter = 10000; var moreResults = true; while (moreResults) { List<WorkItemReference> currentResults = this.WitClient.QueryByWiqlAsync(new Wiql { Query = $"SELECT System.ID FROM WorkItems WHERE System.TeamProject = '{Project}' AND {customQuery} AND System.ID >= {counter - 10000} AND System.ID < {counter}"}).Result.WorkItems.ToList();

      if (currentResults.Count == 0)
      {
          // Verify there are no more items
          try
          {
              results.AddRange(this.WitClient.QueryByWiqlAsync(new Wiql
              {
                  Query = $"SELECT System.ID FROM WorkItems WHERE System.TeamProject = '{Project}' AND {customQuery} AND System.ID >= {counter}"
              }).Result.WorkItems.ToList());
      
              moreResults = false;
          }
          catch (Exception e)
          {
              if (e.ToString().Contains("VS402337"))
              {
                  // There are still more results, so increment and try again.
              }
              else
              {
                  throw;
              }
          }
      }
      else
      {
          results.AddRange(currentResults);
      }
      
      counter += 10000;
      

      }

    【讨论】:

    • @vicky 您是否通过上述解决方法解决了您的问题?有什么更新吗?
    猜你喜欢
    • 1970-01-01
    • 2011-06-26
    • 2018-10-13
    • 2018-12-20
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多