针对codeplex项目的QueryHistory无限期挂起

时间:2010-06-12 19:56:12

标签: tfs tfs2010 codeplex

我正在开发一个TFS实用程序,它可以获取TFS中特定项目的更改集。我有一个家庭TFS 2010服务器,我主要用于测试,但我决定尝试对付我贡献的codeplex项目。这样,我可以针对比本地更多的变更集测试功能。

虽然它在我的环境中运行良好,但通过电线连接到codeplex让我感到难过。我的应用程序查询历史记录,但是当试图遍历历史记录时(即懒惰加载IEnumerable),我的应用程序挂起。

看看Intellitrace,我看到了几个“第一次机会”异常“项目在指定版本中不存在” - 这显然不是真的,因为我正试图获取历史记录“$ / “在VersionSpec.Latest。

在强制调试暂停后,我还看到两个或三个连续的服务器500错误被返回给我。

其他操作(如GetItems())工作正常,所以我很确定身份验证不是问题。

有什么想法吗?

以下是代码:

IEnumerable items = vcs.QueryHistory("$/", VersionSpec.Latest, 1, RecursionType.None, null, null, null, 5, true, false);

        List<ChangesetItem> returnList = new List<ChangesetItem>();
        foreach (Changeset cs in items)  //hangs here on first iteraiton
        {
            ChangesetItem newItem = new ChangesetItem()
            {
                ChangesetId = cs.ChangesetId,
                //ChangesetNote = cs.CheckinNote.Values[0].Value,
                Comment = cs.Comment,
                Committer = cs.Committer,
                CreationDate = cs.CreationDate
            };

            returnList.Add(newItem);
        }

1 个答案:

答案 0 :(得分:0)

卫生署!找到了。问题出在我的QueryHistory调用上:

IEnumerable items = vcs.QueryHistory("$/", 
                  VersionSpec.Latest, 
                  1, // the deletionId should be '0' or a unique deletion identifier
                  RecursionType.None, 
                  null, 
                  null, 
                  null, 
                  5, 
                  true, 
                  false);

我评论了上面的代码行。出于某种原因,我认为deleteId应该是'1',但是,现在我已经看过API,我意识到它应该是零(对于现有文件),或者文件的特定删除Id已被删除。显然,API正在寻找一个deleteId为'1'的文件,它无法找到,从而导致崩溃。