我有一个应用程序,它通过 DirectoryServices 执行 Active Directory 查找来保护某些功能。
我正在将此代码从我们旧域中的网络主机迁移到新域。该代码在旧域上完美运行。但是,在针对新域进行测试时会出现错误。我们在域之间完全信任,因为我们的目标是迁移旧域。新域使用域内的只读域控制器,但通过防火墙规则限制内部网络。只有域中的外围 DMZ 服务器可以访问只读域控制器。
这是有问题的代码行:
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain,"mydc.local:389", null, ContextOptions.Negotiate))
在针对新域进行测试时,我收到以下信息:
[COMException (0x8007203a):服务器无法运行。
和这个:
[ActiveDirectoryServerDownException:服务器无法运行。
连同只读域控制器的 FQDN。
既然我指定了 DC 的名称,那么我的请求不应该转到那个 DC 吗?这可能是我们的 LDAP SRV 记录中的 DNS 路由问题吗?我只能查看对 DNS 的访问权限,并且我发现在 Web 主机所在的内部站点中引用了只读 DC。此外,这些 SRV 记录没有设置优先级。它们都是 0。系统管理员坚持必须有一种编程方法来指向主 DC。我试图通过使用对 PrincipalContext 的调用的大约 6 种变体来做到这一点。
我宁愿坚持使用现代 API,而不是求助于编写 LDAP 字符串。在系统管理员方面,可以研究或检查什么?
在程序方面,我是否正确地指导我的请求?有没有替代方法或万无一失的方法来避免 DC?也许这取决于 DNS,但在这一点上我不确定。
故障排除:当我在 LDAP 请求期间从 Web 主机上的命令行运行 netstat 时,我看到了向我们的两个可写 DC 请求 ldap 连接的位置。之后,还会向只读 DC 发送请求并抛出错误。