PrincipalContext没有连接

PSi*_*air 14 c# asmx activedirectorymembership

我正在尝试将PrincipalContext用于我正在开发的Web服务.我已经在不同的应用程序中的Web服务器上使用表单身份验证,它工作正常.

我收到的错误是:

System.DirectoryServices.AccountManagement.PrincipalServerDownException: The server could not be contacted. ---> System.DirectoryServices.Protocols.LdapException: The LDAP server is unavailable.
   at System.DirectoryServices.Protocols.LdapConnection.Connect()
   at System.DirectoryServices.Protocols.LdapConnection.SendRequestHelper(DirectoryRequest request, Int32& messageID)
   at System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest request, TimeSpan requestTimeout)
   at System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest request)
   at System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig(String serverName, ServerProperties& properties)
   --- End of inner exception stack trace ---
   at System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig(String serverName, ServerProperties& properties)
   at System.DirectoryServices.AccountManagement.PrincipalContext.DoServerVerifyAndPropRetrieval()
   at System.DirectoryServices.AccountManagement.PrincipalContext..ctor(ContextType contextType, String name, String container, ContextOptions options, String userName, String password)
   at System.DirectoryServices.AccountManagement.PrincipalContext..ctor(ContextType contextType, String name, String container, String userName, String password)
   at webService.Service1.ValidUser(String sUserName) in E:\Development\CSharpApps\Desktop\OrgChart\webService\Service1.asmx.cs:line 158
Run Code Online (Sandbox Code Playgroud)

我们的网络服务器位于DMZ中,并通过防火墙访问域.我正在使用下面的端口信息等作为示例.

这可以使用我的开发框中的ip,但它位于防火墙内.我发送给它的ip信息与我在Web表单身份验证中使用的信息相同.

 PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "192.168.1.1:389", "dc=doodlie,dc=com",@"doodlie\admin","doodliesquat");
Run Code Online (Sandbox Code Playgroud)

bru*_*use 0

不管问题如何,安装一些用于 AD 管理/故障排除的宝贵工具对我来说是天赐之物。

如果可能,请在您的计算机或 Web 服务器(如果允许)上安装远程服务器管理工​​具 (RSAT),然后使用 Active Directory 用户和计算机客户端来确定 DC 的确切 URL/IP。如果您无法使用这些工具进行连接,这可能是升级到 IT 支持/开发运营的起点

除此之外,运行网站应用程序的 AD/服务帐户可能没有足够的权限来访问 DC。我已经取得了成功

using (HostingEnvironment.Impersonate())
{
    // code in here. 
}
Run Code Online (Sandbox Code Playgroud)

IIS 中运行网站应用程序的应用程序池应在具有适当权限的用户帐户下运行。(不仅仅需要网络服务)