当我拔掉其中一个 Active Directory 服务器的以太网电缆时,我的应用程序无法验证用户身份,尽管网络上有另一个 Active Directory 服务器可用。这是为什么?我希望如果其中一个 Active Directory 服务器发生故障,其他服务器可以处理请求。
我使用 Windows Server 2008 R2 64 位。
我有一个 IIS 应用程序,它根据 Active Directory 对用户进行身份验证。
string serverName = ConfigurationManager.AppSettings["AD.Server"];
string userName = ConfigurationManager.AppSettings["AD.User"];
string password = ConfigurationManager.AppSettings["AD.Password"];
_principalContext = new PrincipalContext(ContextType.Domain, serverName, userName, password);
以下是配置设置:
<add key="AD.Server" value="192.168.0.1"/> <!--- THIS IS THE PRIMARY PRODUCTION SERVER -->
<add key="AD.User" value="Domain\Administrator"/>
<add key="AD.Password" value="******"/>
然后我设置了另一个 Active Directory 服务器(设为 192.168.0.2)。它成功与生产服务器同步。后来,当我关闭第二个 AD 服务器时,我的应用程序失败,并出现异常“服务器无法运行”。
这是为什么?为什么应用程序依赖于第二台服务器,尽管在配置中明确指定了另一台服务器?
答案1
你的 DC 应该按照你期望的方式工作。
- 跑步DCdiag /a,它是否报告任何故障?
- 如果您在“工作”DC 处于离线状态时重新启动应用程序,它是否可以工作,大概现在指向另一个 DC(即,它是否存在一个问题,即它在启动时绑定到一个 DC,然后在它正在使用的 DC 不可用时无法重新绑定到另一个 DC)?
- 新的 DC 启动了多长时间 - IIS 需要有机会知道它的存在。
- 您不需要指定域控制器 - 您应该将您的应用程序指向域,而不是服务器。
我对发生的事情有点困惑,在你的问题中,你首先说你希望它进行故障转移,但你明确告诉它要使用哪个 DC。如果你需要提供服务器名称,请尝试域的 DNS 名称本身(company.local 或其他)。这将解析为域中每个 DC 的 IP 列表。
答案2
您是否已将 Active Directory 中的所有计算机设置为了解该辅助域控制器 IP 地址?您可以在网络配置的 DNS 部分中执行此操作。