Tfs 针对codeplex项目的查询历史无限期挂起

Tfs 针对codeplex项目的查询历史无限期挂起,tfs,codeplex,Tfs,Codeplex,我正在开发一个TFS实用程序,它可以获取TFS中特定项目的变更集。我有一个家庭TFS2010服务器,主要用于测试,但我决定尝试一下我参与的codeplex项目。这样,我可以针对比本地更多的变更集测试功能 虽然它在我的环境中工作得很好,但从电线到codeplex却让我感到困惑。我的应用程序查询历史记录,但当尝试遍历历史记录时(即延迟加载IEnumerable时),我的应用程序挂起 查看Intellitrace,我看到了两个“第一次机会”异常,即“指定版本中不存在项”-这显然不是真的,因为我正在尝试

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

虽然它在我的环境中工作得很好,但从电线到codeplex却让我感到困惑。我的应用程序查询历史记录,但当尝试遍历历史记录时(即延迟加载IEnumerable时),我的应用程序挂起

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

我还看到,在强制调试暂停后,有两三个连续的Server500错误返回给我

其他操作(如
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);
        }
IEnumerable items=vcs.QueryHistory(“$/”,VersionSpec.Latest,1,RecursionType.None,null,null,null,5,true,false);
List returnList=新列表();
foreach(项目中的变更集cs)//挂在第一个iteraiton上
{
ChangesetItem newItem=新的ChangesetItem()
{
ChangesetId=cs.ChangesetId,
//ChangesetNote=cs.CheckinNote.Values[0]。值,
Comment=cs.Comment,
提交人=cs.提交人,
CreationDate=cs.CreationDate
};
returnList.Add(newItem);
}

Doh!找到了。问题出在我的查询历史电话上:

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);
我对上面的代码行进行了注释。出于某种原因,我认为deletionId应该是“1”,然而,现在我已经查看了API,我意识到它应该是零(对于现有文件),或者已经删除的文件的特定删除Id。显然,API正在寻找一个deletionId为“1”的文件,但找不到该文件,因此导致了崩溃