.Net的目录服务引发了一个奇怪的例外

时间:2010-09-12 12:59:55

标签: c# .net ldap directory service

我有一个用于检查用户凭据的小型C#解决方案。它适用于我的两个队友,但在我的电脑上我得到了例外。

相关代码:

PrincipalContext context = new PrincipalContext(ContextType.Domain);
if (context.ValidateCredentials(System.Environment.UserDomainName + "\\" + usr, pwd))
     return true;
else
     return false;

例外是:

  

DirectoryOperationException,“服务器无法处理目录请求。”。

我尝试使用显式服务器名称和636端口号创建上下文,但这也无济于事。

有什么想法吗?

4 个答案:

答案 0 :(得分:58)

我也使用IIS Express和VS 2010解决了这个问题。为我修复的是对另一个帖子的评论。

Validate a username and password against Active Directory?

但我会保存你的点击和搜索... :)只需将ContextOpations.Negotiate添加到你验证如下所示的凭证调用。

bool valid = context.ValidateCredentials(user, pass, ***ContextOptions.Negotiate***);

答案 1 :(得分:6)

我遇到了这个问题:我的开发机器上的东西正在运行但是在服务器上无法运行。原来,服务器上的IIS设置为以LocalMachine身份运行。我把它改为NetworkService(默认),事情就开始了。

因此,基本上检查应用程序池的用户是否在IIS上运行。

答案 2 :(得分:2)

我必须创建一个新的应用程序池并将其分配给.NET 2.0,然后将新的应用程序池分配给我们的Web应用程序,它就开始工作了。我们有.NET 3.5 SP2,所以这个修补程序对我们来说并不理想。由于WWW服务通常是Local System,我也对此提出质疑。但由于它与.NET和安全相关,我先在应用程序池中进行了一次拍摄,然后才有效。

答案 3 :(得分:1)

也许你需要这个修补程序?

您是管理员或运行服务的ID是PC上的管理员吗?

我认为你已经调查了这个:

“您可能会收到一个不太有用的DirectoryOperationException(”服务器无法处理目录请求。“)对此并不十分有趣的是它甚至没有尝试与服务器通信。解决方案是将端口号添加到服务器。因此,我没有通过“Server”打开LdapConnection,而是通过“server:636”。顺便说一下,LDAPS是端口636 - 而不是LDAP使用的389端口。


好的一点,我不希望Win7 / .NET 3.5需要那个补丁。如何在这个问题中提供的信息: