我在调用ReadIdentities时遇到此错误...从Visual Studio 2010更新到2012 SDK后。它由于其中一个成员中的“\ t”无效而崩溃。 (可能是TFS API中的新验证规则)。
var GSS = tfs.GetService<IIdentityManagementService>();
Identity SIDS = project.GSS.ReadIdentity(SearchFactor.AccountName, "Project Collection Valid Members", QueryMembership.Expanded);
var _TFSUsers = project.GSS.ReadIdentities(SearchFactor.Sid, SIDS.Members, QueryMembership.None);
这个故事最悲哀的部分是我需要找出哪个成员有这个标签字符。 TFS包含2000多名成员。我尝试逐个运行,但只有ReadIdentities方法崩溃。 ReadIdentity通过。因此决定遵循以下步骤:
foreach (var memberSID in SIDS.Members)
{
try
{
var identity = project.GSS.ReadIdentities(SearchFactor.Sid,new string[] { memberSID,}, QueryMembership.None);
}
catch (Exception ex2)
{
throw new InvalidOperationException("Failed to load TFS user: " + memberSID, ex2);
}
}
然而不知怎的,这也不起作用!由于代码完美运行,没有例外。
答案 0 :(得分:0)
我已经制作了将数组分成一半并尝试将搜索范围缩小到最小可能尺寸的方法。
private static void SplitHalf(string[] identities, IIdentityManagementService GSS)
{
var count = identities.Count();
int half = count / 2;
List<string> half1 = new List<string>();
List<string> half2 = new List<string>();
for (int i = 0; i < half; i++)
{
half1.Add(identities[i]);
}
var halfArray1 = half1.ToArray();
try
{
var users = GSS.ReadIdentities(SearchFactor.Sid, halfArray1, QueryMembership.None);
}
catch (Exception ex)
{
SplitHalf(halfArray1, GSS);
}
for (int i = half; i < count; i++)
{
half2.Add(identities[i]);
}
var halfArray2 = half2.ToArray();
try
{
var users = GSS.ReadIdentities(SearchFactor.Sid, halfArray2, QueryMembership.None);
}
catch (Exception ex)
{
SplitHalf(halfArray2, GSS);
}
}
通过这种方式,我能够将断点与条件计数== 2进行比较。然后缩小以找出崩溃的东西的显示名称和标识。我希望这能节省一些时间。似乎只有在为方法参数提供最少两个SIDS时才会发生崩溃,只提供一个,不会导致错误......