Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我什么时候需要域名和域容器来创建PrincipalContext?_C#_.net_.net 4.0_Active Directory_Adsi - Fatal编程技术网

C# 我什么时候需要域名和域容器来创建PrincipalContext?

C# 我什么时候需要域名和域容器来创建PrincipalContext?,c#,.net,.net-4.0,active-directory,adsi,C#,.net,.net 4.0,Active Directory,Adsi,我正在开发一个C#.NET框架库来访问active directory 我要做的一件事就是吸引所有的广告用户,我发现: PrincipalContext principalContext = new PrincipalContext(ContextType.Domain, domainName.Trim(), domainContainer.Trim()); 及 返回具有以下

我正在开发一个C#.NET框架库来访问active directory

我要做的一件事就是吸引所有的广告用户,我发现:

PrincipalContext principalContext =
    new PrincipalContext(ContextType.Domain,
                            domainName.Trim(),
                            domainContainer.Trim());

返回具有以下代码的相同用户:

// define a "query-by-example" principal - here, we search for all users
UserPrincipal qbeUser = new UserPrincipal(principalContext);

// create your principal searcher passing in the QBE principal    
PrincipalSearcher srch = new PrincipalSearcher(qbeUser);

// find all matches
foreach (var found in srch.FindAll())
{
    UserPrincipal user = found as UserPrincipal;
    if (user != null)
    {
        Console.WriteLine(user.SamAccountName);
    }
}

何时需要使用域名和域容器?

上下文用于以这种方式创建目录条目:

new DirectoryEntry("LDAP://domain_name/container")
或当没有容器时:

new DirectoryEntry("LDAP://domain_name/rootDse")
你可以省略域名,但我建议你一定要包含它,因为我在过去遇到过问题(一些随机抛出的异常)

如果要将搜索限制为特定OU,则应包含容器

使用时

var context = new PrincipalContext(ContextType.Domain);
它将连接到当前上下文的域,通常是运行应用程序的用户登录的域,或者如果当前上下文是未连接到域的本地用户,则将引发异常

使用时

var context = new PrincipalContext(ContextType.Domain, domainName, domainContainer);
域属性允许您连接到当前上下文以外的域,前提是当前上下文具有权限或您提供了有效凭据。因此,例如,在一个林中存在多个域或域信任的环境中,您可以指定另一个域来运行查询,而不是用户所属的域


容器属性将使用该
DomainContext
的所有查询限制为指定的容器。

为了澄清,这是否意味着(示例1)用户必须在连接到域的计算机上?如果我使用的是受信任域,FindByIdentity无法在跨域上找到用户。你知道怎么避开吗?
var context = new PrincipalContext(ContextType.Domain, domainName, domainContainer);