C# can';t在未特别连接到直流电的情况下连接到AD

C# can';t在未特别连接到直流电的情况下连接到AD,c#,active-directory,domaincontroller,C#,Active Directory,Domaincontroller,我试图绑定到C#中的Active Directory服务器,但在现场,我似乎遇到了在测试环境中无法重现的问题 我有个例外 System.Runtime.InteropServices.COMException (0x8007203A): The server is not operational. at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) at System.DirectoryServic

我试图绑定到C#中的Active Directory服务器,但在现场,我似乎遇到了在测试环境中无法重现的问题

我有个例外

System.Runtime.InteropServices.COMException (0x8007203A): The server is not operational.
   at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
   at System.DirectoryServices.DirectoryEntry.Bind()
   at System.DirectoryServices.DirectoryEntry.RefreshCache()
   at System.DirectoryServices.DirectoryEntry.FillCache(String propertyName)
   at System.DirectoryServices.DirectoryEntry.get_NativeGuid()  
代码如下所示

// domainStr = "LDAP://domainname/rootDSE
using (var de = new DirectoryEntry(domainStr, Username, Password))
{
    var guid = de.NativeGuid;
}
但是,如果我尝试连接域控制器(
domainStr=“LDAP://domainController/rootDSE”
或完全限定的
domainStr=“LDAP://domainController.DomainName”
),它可以正常工作

我试过了

var d = Domain.GetDomain(new DirectoryContext(
            DirectoryContextType.Domain,
            domainStr,
            Username,
            Password));
但是当我这样做的时候,我得到了完全相同的例外

我想知道我是不是做错了什么,也许一个不同的LDAP URL会更好,或者这是我遇到的一个常见问题(尽管谷歌搜索提出了这个问题,但我还没有找到一个适合我的解决方案)


另外,值得指出的是,运行软件的服务器不在任何Active Directory中,我有一个连接到的广告列表(因此在尝试连接时使用用户名和密码)

这是因为DNS服务器没有域的a记录。当您向DNS服务器传递域名时,它不知道要解析到哪个IP地址。通常,您不会遇到此问题,因为默认情况下MS Windows内置DNS服务器会为您添加此记录。然而,在大型企业中,他们通常不使用MS Windows内置的DNS服务器。在许多情况下,人们只是懒得在域名中添加一条记录

如果可能,您可以要求客户向DNS服务器添加A记录。或者,请您的客户修复c:\windows\system32\drivers\etc\hosts文件。然后,在那里添加一个记录。您可以将其指向域控制器的任何一个。但是,这种方法无法扩展,因为不同站点的用户都将把域名解析为相同的IP地址。对于某些远程站点用户,他们可能会遇到速度缓慢的问题


如果您还想解决可伸缩性问题,您可以考虑冒充用户,而不是将用户名密码传递到DisturyAccess < /代码>中。一旦你模拟了一个域用户,你可以像这样使用无服务器绑定

LDAP://RootDSE

你使用的是该域的“现场”成员吗??如果没有,您将需要指定一个特定的域用户+pwd才能执行任何操作。另外,我相信正确的LDAP路径应该是
LDAP://RootDSE
——这条路径适合您吗?我不知道您的意思是什么!但是使用C#可以确保即使您的计算机不是域的成员,您也可以通过指定DCs IP/Name/Address连接到AD。该计算机不是域的成员(因此我不能只连接
LDAP://RootDSE
)。但是,在尝试连接时,我确实使用了用户名和密码,但除非我明确指定域控制器,否则仍然会出现上述异常。