【问题标题】:C# DirectoryEntry object security property throwing a null reference exceptionC# DirectoryEntry 对象安全属性引发空引用异常
【发布时间】:2012-06-15 18:37:49
【问题描述】:

我正在尝试跟踪应用程序错误,但我不是 WinNT 提供程序方面的专家。这是我正在调试的代码:

 public string GetCurrentRequesterIdentity()
    {
        var a = HttpContext.Current.User.Identity.Name.Split('\\');

        using (var adEntry = new DirectoryEntry("WinNT://" + a[0] + "/" + a[1]))
        {
            return adEntry.Properties["FullName"].Value.ToString();
        }
    }

当我调试此代码并运行 "?New DirectoryEntry("WinNT://DOMAIN/User")" 其中 DOMAIN 和 User 是(假定)有效条目时,窗口会为 ObjectSecurity 行返回以下内容:

ObjectSecurity: 'new DirectoryEntry("WinNT://[DOMAIN]/[USER]").ObjectSecurity' 引发了类型为 'System.NullReferenceException' 的异常

我看到应用程序抛出“找不到网络路径”错误。我只能复制一次这个错误,不能再复制一次。不幸的是,对于 2 个生产用户,几乎每次都会发生这种情况,但在测试环境中从未发生过。

以前有人见过这种情况吗?或者知道在哪里可以找到它?

【问题讨论】:

    标签: c# active-directory


    【解决方案1】:

    看起来 a[0] 或 a[1] 的值为空。您是否验证了这些值是否正确以及域和用户是否存在?您应该调试或记录 a[0] 或 a[1] 的值并尝试找出错误。

    【讨论】:

    • 谢谢。奇怪的是:即使出现 ObjectSecurity 空引用异常,代码也会运行并返回正确的数据。我仍在尝试确认“WinNT://DOMAIN/User”是应用程序需要的路径。
    【解决方案2】:

    最终通过删除 DirectoryEntry 行并仅引用用户名的 HttpContext.Current.User.Identity.Name.Split('\') 来解决此问题。它只返回用户名而不是登录用户的全名并不重要。显然它与我们的系统管理员不愿处理的 AD 权限问题有关,因此删除代码最终提供了最简单的解决方案。

    【讨论】:

      猜你喜欢
      • 2021-12-14
      • 2015-07-25
      • 1970-01-01
      • 1970-01-01
      • 2011-06-06
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      • 2016-02-28
      相关资源
      最近更新 更多