C# .Net';s目录服务引发了一个奇怪的异常

C# .Net';s目录服务引发了一个奇怪的异常,c#,.net,ldap,directory,service,C#,.net,Ldap,Directory,Service,我有一个用于检查用户凭据的小型C#解决方案。这对我的两个队友来说很好,但在我的电脑上我得到了一个例外 有关守则: PrincipalContext context = new PrincipalContext(ContextType.Domain); if (context.ValidateCredentials(System.Environment.UserDomainName + "\\" + usr, pwd)) return true; else return fal

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

有关守则:

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

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

我尝试使用显式服务器名和636端口号创建上下文,但这也没有帮助


有什么想法吗?

也许你需要修补程序

您是管理员,或者您的服务所使用的id是您电脑上的管理员,对吗

我想你已经调查过了:

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


很好,我不希望Win7/.NET3.5需要这个补丁。这个问题中提供的信息如何:


我遇到了这个问题:我的开发机器上的东西正常工作,但服务器上的东西不正常。结果表明,服务器上的IIS已设置为作为本地计算机运行。我把它改成了NetworkService(默认设置),一切都开始工作了


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

我在使用IIS Express和VS 2010时也遇到了这个问题。对我来说,修复它的是另一个帖子上的评论

但我将为您保存单击和搜索…:)只需添加上下文。通过如下方式协商验证凭据调用

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

我只需要创建一个新的应用程序池并将其分配给.NET2.0,然后将新的应用程序池分配给我们的web应用程序,它就开始工作了。我们有.NET3.5SP2,所以修补程序对我们来说并不理想。由于WWW服务通常是本地系统,我对此也提出了质疑。但是由于它与.NET和安全相关,我首先尝试了一下应用程序池,它成功了。

也许我这里出了什么问题,但修补程序是针对.Net2的,由于我使用3.5,我没有安装.Net2 SP1,这让修补程序很生气:)关于报价-我看到了,但还是非常感谢!好的,看来修补程序不是针对win7的-无法安装SP1。问题是此代码动态获取了一个服务器,因此收到了一个不运行Windows 2008的服务器。当获得运行Win2008的特定服务器时,一切又开始工作了。万岁!因此,使用该修补程序或Windows Server 2008是该异常的解决方案。我可以用C#以编程方式执行吗?检查应用程序池的用户是否在IIS上运行?以编程方式获取应用程序池用户:通过切换到ApplicationPoolIdentity为我工作如果这里没有其他帮助,也许可以看到我最后的评论:这应该被标记为决议。我在一个简单的测试应用程序(实际上是一个小的WPF程序)上遇到了这个异常,它只有在通过VPN连接到目标域时才会抛出异常。每当使用VPN遇到身份验证问题时,请提供ContextOptions。协商一次。为什么要使用
ContextOptions。协商
?@Kiquenet正如Brett Veenstra解释的那样:“…”。NET默认使用以下技术:LDAP+SSL、Kerberos,然后是RPC。我怀疑RPC在您的网络中处于关闭状态(很好!)而且,除非您使用ContextOptions.Negotiate明确告诉.NET,否则Kerberos实际上不会被.NET使用。在同一台服务器上,我发现错误
服务器无法处理IIS网站中的目录请求,但在另一个IIS网站中则可以。源代码是相同的(这是一个
TestAD.aspx
页面)。这个答案不仅仅适用于VS2010,同样适用于AspNet Core和Kestrel。我将以前的工作代码移植到一个核心项目中,上面的代码为我解决了这个问题。