连接到 TFS 的 Windows 服务.IGroupSecurityService 实例创建失败,无异常
本文关键字:失败 创建 异常 实例 IGroupSecurityService TFS Windows 服务 连接 | 更新日期: 2023-09-27 18:32:19
我在尝试连接到 TFS 实例的 Windows 2012 R2 服务器上安装了一个正在运行的服务。
打开远程调试并查看代码后,我注意到下面的部分设置了断点。一旦我单击第一行的单步执行,调试器的行为就像我单击继续一样,我退出我的单步执行,调试器声称代码正在继续。没有引发异常。
服务计时器每五分钟调用一次此代码,我认为计时器调用的代码永远不会完成,在第一行之后它会遇到某种崩溃。五分钟后,代码尝试再次运行,所以我知道它没有使整个服务崩溃。
我查看了事件视图,那里没有信息。
IGroupSecurityService gss = (IGroupSecurityService)TfsConfiguration._tfsProjectCollection.GetService(typeof(IGroupSecurityService));
Identity SIDS = gss.ReadIdentity(SearchFactor.AccountName, "Project Collection Valid Users", QueryMembership.Expanded);
List<Identity> FoundIds = gss.ReadIdentities(SearchFactor.Sid, SIDS.Members, QueryMembership.None).ToList();
检查这种情况:
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.Server;
using Microsoft.TeamFoundation.VersionControl.Client;
using Microsoft.TeamFoundation.Framework.Client;
namespace API
{
class Program
{
static void Main(string[] args)
{
string project = "http://xxx.xxx.xxx.xxx:8080/tfs";
TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(new Uri(project));
var tps = tpc.GetService<VersionControlServer>();
var ttt = tps.GetTeamProject("ProjectName");
ISecurityService securityService = tpc.GetService<ISecurityService>();
System.Collections.ObjectModel.ReadOnlyCollection<SecurityNamespace> securityNamespaces = securityService.GetSecurityNamespaces();
IGroupSecurityService gss = tpc.GetService<IGroupSecurityService>();
Identity SIDS = gss.ReadIdentity(SearchFactor.AccountName, "GroupName", QueryMembership.Expanded);//GourName format: [ProjectName]''GourpName
IdentityDescriptor id = new IdentityDescriptor("Microsoft.TeamFoundation.Identity", SIDS.Sid);
List<SecurityNamespace> securityList = securityNamespaces.ToList<SecurityNamespace>();
string securityToken;
foreach (SecurityNamespace sn in securityList)
{
if (sn.Description.DisplayName == "Project")
{
securityToken = "$PROJECT:" + ttt.ArtifactUri.AbsoluteUri;
sn.SetPermissions(securityToken, id, 115, 0, true);
}
}
}
}
}
我的假设最终偏离了基础。这不是问题的根源。我将在另一个问题中发布真实案例。这已经是两周的问题了,很抱歉在这里浪费了一个问题。