C# can';t在未特别连接到直流电的情况下连接到AD
我试图绑定到C#中的Active Directory服务器,但在现场,我似乎遇到了在测试环境中无法重现的问题 我有个例外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
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地址。对于某些远程站点用户,他们可能会遇到速度缓慢的问题
如果您还想解决可伸缩性问题,您可以考虑冒充用户,而不是将用户名密码传递到LDAP://RootDSE
LDAP://RootDSE
——这条路径适合您吗?我不知道您的意思是什么!但是使用C#可以确保即使您的计算机不是域的成员,您也可以通过指定DCs IP/Name/Address连接到AD。该计算机不是域的成员(因此我不能只连接LDAP://RootDSE
)。但是,在尝试连接时,我确实使用了用户名和密码,但除非我明确指定域控制器,否则仍然会出现上述异常。