gpt4 book ai didi

c# - PrincipalContext 从哪里获取连接的服务器名称?

转载 作者:行者123 更新时间:2023-11-30 21:37:09 29 4
gpt4 key购买 nike

我有一个带有 Windows 身份验证的 Web 应用程序。当我调试线路时

var domainContext = new PrincipalContext(ContextType.Domain, "abc");

其中“abc”是域名。

我可以看到连接的服务器作为域 Controller 名称。我想知道它从哪里获取 DC 名称。

实际上,问题是,即使特定 DC 被降级并添加了新 DC,我们的应用程序始终指向相同的降级 DC,并在我们尝试使用以下行获取用户组时抛出错误。

var user = UserPrincipal.FindByIdentity(domainContext, "username");
var groups = user.GetGroups();

[ActiveDirectoryServerDownException: The server is not operational.

Name: "DomainController.Domain.com"

]

System.DirectoryServices.ActiveDirectory.PropertyManager.GetPropertyValue(DirectoryContext context, DirectoryEntry directoryEntry, String propertyName) +510

System.DirectoryServices.ActiveDirectory.DirectoryEntryManager.ExpandWellKnownDN(WellKnownDN dn) +239

System.DirectoryServices.ActiveDirectory.DomainController.get_Domain() +71

System.DirectoryServices.AccountManagement.ADStoreCtx.GetGroupsMemberOf(Principal p) +839

System.DirectoryServices.AccountManagement.Principal.GetGroups() +32

我是否需要清除 IIS 缓存或其他一些缓存?我也重新启动了 IIS。

最佳答案

如果您的服务器属于域 Controller ,您可以通过编程方式检索 DC 名称。

    using (var context = new System.DirectoryServices.AccountManagement.PrincipalContext(ContextType.Domain))
{
server = context.ConnectedServer;
//Output : dc.example.com
var formatted = server.Split('.').Select(s => String.Format("DC={0}", s));
joined = String.Join(",", formatted);
// Output DC=dc,DC=example,DC=com
}

如果服务器不是域 Controller 的一部分。您可以使用这样的凭据来检索它;

        System.DirectoryServices.ActiveDirectory.DirectoryContext domainContext = new DirectoryContext(DirectoryContextType.Domain, "domainName", "domainUser", "Password");
var domain = ActiveDirectory.Domain.GetDomain(domainContext);
var controller = domain.FindDomainController();

关于c# - PrincipalContext 从哪里获取连接的服务器名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47512201/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com