UserPrincipal.FindByIdentity 导致 COM 错误 0x80005000

2024-06-28

我有一个 MVC Intranet 应用程序,最近从 .Net 4 升级到 4.6.1。此应用程序从 Active Directory 查询用户详细信息,以加载控制器的 User.Identity 属性中不可用的详细信息,并且直到最近才完美地完成此操作。代码看起来像这样:

public static void foo()
{
    var usr = LookupUser("MyDomain", "jbloggs");
    ...
}

private static UserPrincipal LookupUser(string domain, string username)
{
    Console.WriteLine($"Lookup {domain}\\{username}");
    using (var ctx = new PrincipalContext(ContextType.Domain, domain))
    {
        using (var user = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, username))
        {
            if (user == null)
            {
                Console.WriteLine("User not found");
                return;
            }

            Console.WriteLine($"Found {domain}\\{username}");
            Console.WriteLine($"DisplayName = {user.DisplayName}");
            Console.WriteLine($"Office = {user.GetString("physicalDeliveryOfficeName")}");
            Console.WriteLine("");

            return user;
        }
    }
}

在 Visual Studio 2015 中调试时,代码运行良好,但在 IIS 机器(Windows Server 2008 R2 上的 v6.1 SP1)上运行时,调用 UserPrincipal.FindByIdentity() 时会引发 COMException (0x80005000)

Web应用程序运行在专用的应用程序池上,其设置如下:

  • .Net框架版本= v4.0
  • Identity = MyDomain\MyAppServiceUser(非交互式 AD 用户帐户)
  • 加载用户配置文件 = false

所有其他设置均按照默认值。应用程序本身在启用匿名和 Windows 身份验证的情况下运行。服务器安装了 .Net 4.6.1,并且 Intranet 应用程序的所有其他元素似乎都运行良好。

谷歌搜索死了这个问题,大多数答案似乎表明这是服务帐户查询 AD 的权限的问题。为了确认应用程序池运行的服务帐户确实有权查询 Active Directory,我在控制台应用程序中使用了上述代码,并以我自己和服务器上的服务帐户的身份运行它 - 在这两个应用程序中实例它工作得很好。它只有在 IIS 下运行时才会崩溃。

我尝试了多种创建PrincipalContext(包括OU容器路径等)的变体,但结果始终相同。

我正在为此努力,所以任何帮助将不胜感激。

更新 - 附加详细信息

  • 异常类型:System.Runtime.InteropServices.COMException
  • 异常消息:未知错误 (0x80005000)
  • 堆栈跟踪:

在 System.DirectoryServices.DirectoryEntry.Bind(布尔 throwIfFail) 在 System.DirectoryServices.DirectoryEntry.Bind() 处 System.DirectoryServices.DirectoryEntry.get_AdsObject() 位于 System.DirectoryServices.PropertyValueCollection.PopulateList() 位于 System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry 条目,字符串属性名称)位于 System.DirectoryServices.PropertyCollection.get_Item(字符串 属性名称)位于 System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInitNoContainer() 在 System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit() 在 System.DirectoryServices.AccountManagement.PrincipalContext.Initialize() 在 System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx() 在 System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelper(PrincipalContext 上下文,类型主体类型,可为 Nullable`1 身份类型,字符串 身份值、日期时间参考日期)位于 System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithType(PrincipalContext 上下文、类型主体类型、身份类型身份类型、字符串 身份值)在 System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext 上下文、IdentityType 身份类型、字符串identityValue)位于 Apollo.Security.ActiveDirectoryUser.Find(字符串身份名称)


谈论一个令人头疼的事情。我一天的大部分时间都在这件事上兜圈子。

感谢拉胡尔的所有帮助。最后,根据他的建议,我创建了一个作为网络服务运行的新应用程序池,并且 AD 查找在该应用程序池下完美运行。不幸的是,因为我的应用程序访问网络资源,所以它需要以 AD 用户身份运行,所以为了解决这个问题,我将凭据更改为我之前使用的 AD 服务帐户,它仍然有效.

?!?

我不知道为什么会出现这种情况 - 两个应用程序池具有完全相同的设置,但一个可以执行查找,而另一个则不能。我已将测试实例和生产实例切换到新的应用程序池,并删除了旧的应用程序池,一切进展顺利。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UserPrincipal.FindByIdentity 导致 COM 错误 0x80005000 的相关文章

随机推荐

  • Air 2 ServerSocket跨域问题

    我希望通过 ServerSocket 类创建一个 Air 2 服务器 您将在下面的代码中找到有关它的示例 限制条件 服务器必须在空中 客户端必须通过网络浏览器显示 客户端使用Web浏览器显示 因此当客户端想要与Air服务器建立连接时 Fla
  • backbone.js 集合未正确删除视图中的项目

    在视图中 我在从模型内的集合中删除项目时遇到一些问题 基本上模型 集合结构如下 基本上 当我尝试从子项目视图中的子项目集合中删除项目时 它实际上会从集合中删除正确的项目 然而 当我坚持主模型时 该项目似乎仍在集合中 这就是我的观点的结构 主
  • 尽管已成功,但由于“实例不可用”,GAE 推迟了任务重试

    在我们的 GAE 应用程序中 我们偶尔会在延迟任务中看到 TombstonedTaskError 错误 因为命名任务使用相同的名称多次提交 尽管延迟任务的第一次执行成功 但 GAE 似乎偶尔会自动重新提交这些任务 一个例子可以在这个日志截图
  • 重写的方法仍然被调用

    我正在使用一个正在实现的库belongs to数据库中两个条目之间的关联 由于这不是我需要的行为 我想通过重写此方法prepend 但 pry 告诉我 原来的方法仍然被调用 我仔细检查了一下 我使用的是 ruby 2 0 前置的代码 mod
  • 结构化流式自定义重复数据删除

    我有一个从 kafka 进入 dataFrame 的流数据 我想根据 Id 删除重复项并根据时间戳保留最新记录 样本数据是这样的 Id Name count timestamp 1 Vikas 20 2018 09 19T10 10 10
  • 在 Rails 中捕获 UTM 参数

    我正在尝试捕获 URL 中的 UTM 参数 以将源 营销活动等添加到用户帐户 可悲的是 我似乎不知道如何捕获这些参数 据我所知 我正在关注博客文章http www matthuggins com articles tracking new
  • 如何以 dp 值设置 Layoutparams 高度/宽度?

    我尝试在按钮中手动设置高度 宽度 但它不起作用 然后实现Layoutparams 但尺寸显示很小并且没有获得所需的 dp 值 XML
  • 如何检测 itextSharp 中的表开头?

    我正在尝试将 pdf 转换为 csv 文件 pdf 文件具有表格格式的数据 第一行作为标题 我已经达到了可以从单元格中提取文本 比较表格中文本的基线并检测换行符的水平 但我需要比较表格边框来检测表格的开头 我不知道如何检测和比较 PDF 中
  • Html 电子邮件对齐文本和图像

    I m having trouble aligning an image with text The problem only occurs in outlook 03 07 10 See this picture to get a bet
  • Spring Boot / Kafka Json 反序列化 - 可信包

    我刚刚开始将 Kafka 与 Spring Boot 一起使用 并且想要发送和使用 JSON 对象 当我尝试使用 Kafka 主题中的消息时 出现以下错误 org apache kafka common errors Serializati
  • “在文件中查找”的替代方法

    我已经按照建议解决了 在文件中查找不是 问题here https stackoverflow com questions 4795443 visual studio 2010 find in files not finding files并
  • 从文件中删除字符

    如何删除文件中的任意字符 而不是用某些字符替换 include
  • 将隐藏的 DIV 保存为画布图像

    我使用以下代码将可见内容保存为图像 html2canvas document querySelector specific onrendered function canvas theCanvas canvas Canvas2Image s
  • 使 WTForms 从数据库模型设置字段标签

    我有三张桌子 成分 属性 and 属性值 每个组件可以有多个属性值 Each 属性值属于一个属性 是的 这就是可怕的 EAV 模式 我创建了这两种形式 class AttributeValueForm Form attribute Hidd
  • 如何使文本框上的自动完成功能在空时显示建议

    我在文本框 实际上是 ToolStripTextBox 上使用 AutoComplete 属性 这工作正常 只是直到我至少输入一个字符才显示 即使文本框为空 如何才能显示建议 Mode Suggest Source CustomSource
  • 如何在 dbplyr 中使用自定义 SQL 函数?

    我想计算数据库中的 Jaro Winkler 字符串距离 如果我将数据带入 R 使用collect 我可以轻松地使用stringdist函数从stringdist包裹 但我的数据非常大 我想过滤 Jaro Winkler 距离before将
  • 在 Ruby 中使用 `module_function` 定义模块函数与使用 `self.` 定义它相同吗?

    正在定义一个模块函数module function与定义它相同self 在鲁比 也就是说 它们是否都会导致实例方法和模块方法的创建 No module M1 def self foo end end module M2 module fun
  • DateTimeOffset 如何处理夏令时?

    我将日程表以星期几 小时和分钟的形式存储在数据库中 当数据被读取时 我们创建一个DateTime对象下一次出现的那一天 一小时和一分钟 但我需要修改它以使其能够感知 DST 如有必要 我可以修改数据库 我知道DateTimeOffset存储
  • For 循环 Bash 中的大数序列[重复]

    这个问题在这里已经有答案了 在 Bash 脚本中 我使用一个简单的 for 循环 如下所示 for i in seq 1 1 500 do echo i done 这个 for 循环工作得很好 但是 当我想使用较大数字的序列 例如 10 8
  • UserPrincipal.FindByIdentity 导致 COM 错误 0x80005000

    我有一个 MVC Intranet 应用程序 最近从 Net 4 升级到 4 6 1 此应用程序从 Active Directory 查询用户详细信息 以加载控制器的 User Identity 属性中不可用的详细信息 并且直到最近才完美地