在Active Directory环境中,服务连接点(SCP)是一种非常有用的机制,它允许存储关于服务的连接信息。本文将介绍SCP的基本概念,以及如何使用C#语言在.NET框架下操作SCP。
服务连接点(SCP)是活动目录(Active Directory)中的一种对象,用于存储特定服务的信息,包括访问参数。通过Microsoft的AD Explorer工具,可以浏览这些对象,例如在域控制器的级别上。SCP可以存储如DNS服务名称和绑定选项等信息,并通过一个通用标识符(例如一个众所周知的GUID)进行访问。
要通过编程方式操作SCP,可以使用.NET框架中的System.DirectoryServices命名空间,它为原生COM对象提供了丰富的包装。以下是创建SCP的基本步骤:
首先,定义一个类SvcConnectionPoint
,用于存储服务的所有信息,以及一个类SvcConnectionPointMgr
,用于控制对AD对象的访问。创建一个简单的SCP,可以使用以下调用序列:
SvcConnectionPointMgr s = new SvcConnectionPointMgr();
SvcConnectionPoint scp = s.CreateConnectionPoint(
"MyUniqueSCPId",
"ADSComputerName",
"Name of the SCP",
"DNS Name (URL)",
"Binding Options/Parameters"
);
方法CreateConnectionPoint
会在目标计算机的ADS对象下作为子对象添加一个连接点条目。以下是实现这一功能的代码示例:
DirectoryEntry scp_entry = null;
// 打开现有的scp
scp_entry = p.Children.Find(adsName);
// 创建新的子记录
if (null == scp_entry)
scp_entry = p.Children.Add(adsName, "serviceConnectionPoint");
// 构建scp对象
SvcConnectionPoint scp = new SvcConnectionPoint(scp_entry);
// 填充值
scp.svcKeyword = keyword;
scp.dnsName = dnsName;
scp.svcBinding = bindingOptions;
对ADS对象的任何更改都需要通过调用CommitChanges
方法来明确提交:
_scp.CommitChanges();
读取Active Directory中的服务连接点信息的过程与此类似。需要通过LDAP搜索具有特定唯一标识符的属性关键字的对象,并读取正确的属性。以下是实现这一功能的代码示例:
String ldapFilter = "(keywords=" + uuid + ")";
List props = new List();
props.Add("serviceDNSName");
props.Add("serviceBindingInformation");
DirectorySearcher search = null;
if (start != null)
search = new DirectorySearcher(start, ldapFilter);
else
search = new DirectorySearcher(ldapFilter);
search.PropertiesToLoad.AddRange(props.ToArray());
SearchResultCollection src = search.FindAll();
if (src == null)
return null;