首先让我说我对 Active Directory 相当陌生,而且我不是处理服务器配置的人(如果这确实是与服务器相关的问题)。但是,如果给出适当的建议,我可以将所说的建议传达给正确的人。
我们正在运行一个大型 ASP.NET C# .NET 3.5 应用程序。
这是我们遇到的场景:
我创建了一个测试页面来测试我们的全局目录 AD 搜索。
从测试服务器 1 发生的情况如下:
使用 GC://TEST.COM:3268(不安全)-> 出色的性能。
使用 G:C//TEST.COM:3269(安全)-> 出色的性能
从测试服务器 2:
使用 GC://TEST.COM:3268(不安全)-> 出色的性能。
使用 G:C//TEST.COM:3269(安全)-> 失败。
我看到的唯一异常是:异常:“服务器无法运行”
我认为这不是代码问题,因为两个测试服务器都运行相同的代码。只有当我们尝试从测试服务器 2 连接到 GC 的安全端口时,我们才会遇到问题。
这是我尝试在服务器上运行它时的异常信息,我让它将异常转储到日志表中:
目录服务 Com 异常(异常消息):服务器无法运行。错误代码:-2147016646 堆栈跟踪:
在 System.DirectoryServices.DirectoryEntry.Bind(布尔 throwIfFail)
在 System.DirectoryServices.DirectoryEntry.Bind() 在 System.DirectoryServices.DirectoryEntry.get_AdsObject()
在 System.DirectoryServices.DirectorySearcher.FindAll(布尔 findMoreThanOne)
在 System.DirectoryServices.DirectorySearcher.FindOne() 在 TestClass.GetUserDomainTest(String UserName) 中
testclass.aspx.cs:第 155 行
就像我说的那样,我不认为这是代码问题,但如果可能有帮助,我已经附上了代码:
private string GetUserDomain2(string UserName)
{
string domainName = String.Empty;
try
{
// This is Test page code so we can change the values as we want
DirectoryEntry entry = new DirectoryEntry(txtGCPath.Text)
entry.Username = txtGCUserID.Text;
entry.Password = txtGCPassword.Text;
// Set SSL or leave default
if (cb1.Checked == true)
{
entry.AuthenticationType = AuthenticationTypes.SecureSocketsLayer;
}
DirectorySearcher search = new DirectorySearcher();
search.SearchRoot = entry;
search.SearchScope = SearchScope.Subtree;
search.Filter = string.Format(txtGCFilter.Text, UserName);
SearchResult results = search.FindOne(); // CRASHES HERE
// Parsing code removed.
return domainName;
}