【问题标题】:.Net's Directory Services throws a strange exception.Net 的目录服务抛出一个奇怪的异常
【发布时间】:2011-04-11 07:54:55
【问题描述】:

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

相关代码:

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

例外是:

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

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

有什么想法吗?

【问题讨论】:

标签: c# .net ldap directory service


【解决方案1】:

我在使用 IIS Express 和 VS 2010 时也遇到了这个问题。对我来说解决这个问题的是对另一个线程的评论。

Validate a username and password against Active Directory?

但我会为您节省点击和搜索... :) 只需将 ContextOpations.Negotiate 添加到您的 Validate Credentials 调用中,如下所示。

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

【讨论】:

  • 这应该被标记为分辨率。我在一个简单的测试应用程序(实际上是一个小型 WPF 程序)上遇到了这个异常,它只有在通过 VPN 连接到目标域时才抛出异常。每当使用 VPN 遇到身份验证问题时,请尝试 ContextOptions.Negotiate。
  • 为什么原因使用ContextOptions.Negotiate
  • @Kiquenet 正如 Brett Veenstra 解释的那样:...".NET 默认使用以下技术:LDAP+SSL、Kerberos,然后是 RPC。我怀疑 RPC 在您的网络中已关闭(很好!)并且Kerberos 实际上并没有被 .NET 使用,除非您使用 ContextOptions.Negotiate" 明确告诉它...
  • 同一台服务器,我在 IIS 网站中收到 error The server cannot handle directory requests,但它是 OK 在另一个 IIS 网站中。 源代码相同(是TestAD.aspx页面)。
  • 这个答案不仅仅是 VS 2010,与 AspNet Core 和 Kestrel 的问题相同。我将以前工作的代码移植到一个核心项目中,上面为我解决了这个问题。
【解决方案2】:

我遇到了这个问题:我的开发机器上运行正常,但在服务器上却没有运行。原来服务器上的 IIS 设置为作为 LocalMachine 运行。我将其更改为 NetworkService(默认),一切都开始工作了。

所以基本上检查应用程序池的用户是否在 IIS 上运行。

【讨论】:

  • 如果在 IIS 上运行,我可以在 C# 中以编程方式检查应用程序池的用户吗?
  • 以编程方式获取应用程序池用户:stackoverflow.com/questions/10101162/…
  • 通过切换到 ApplicationPoolIdentity 为我工作
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    也许您需要修补程序?

    您是管理员,或者运行您的服务的 id 是您 PC 上的管理员,对吗?

    我认为你已经调查过了:

    “您可能会收到一个不太有用的 DirectoryOperationException(“服务器无法处理目录请求。”) 不太有趣的是,它甚至没有尝试与服务器通信。 “


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

    【讨论】:

    • 也许我这里出了点问题,但是修补程序是针对 .Net2 的,而且我使用 3.5,我没有安装 .Net2 SP1,这让修补程序很生气 :) 关于报价- 我看到了,但还是非常感谢!
    • 好的,看来这个修补程序不适用于 win7 - 无法安装 SP1。
    • 问题是这段代码动态获取服务器,因此接收到的服务器没有运行 Windows 2008。当获取运行 Win2008 的特定服务器时,一切又开始工作了。万岁!
    • 因此,使用该修补程序或使用 Windows Server 2008 是该异常的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    相关资源
    最近更新 更多