2012-03-13 68 views
2

将此代码部署到身份为应用程序池用户的Web应用程序时,以下代码会引发未知的COM异常。当调用FindByIdentity方法时发生异常。GroupPrincipal.FindByIdentity未知COM异常

System.Runtime.InteropServices.COMException:未知错误 (0x8000500c)

using (PrincipalContext prinCon = new PrincipalContext(ContextType.Domain)) 
{ 
    GroupPrincipal groupPrin = GroupPrincipal.FindByIdentity(prinCon, name); 
} 

如果我更改应用程序池标识这一问题得到解决的域用户。最初导致我认为这是一个权限/安全问题。但是,这个错误不会发生在所有服务器上,只是一些。此外,重新启动将解决此问题。

所以,我的问题是为什么会重新启动服务器解决这个问题?有没有办法让我的工作无需重新启动?

我已经做了大量的谷歌搜索,并没有遇到任何人有同样的问题,一些权限类似的问题,但没有任何帮助解决我的问题。

在此先感谢。

+0

什么是你的'name'值?你在那里指定了什么? – 2012-03-13 16:12:38

+0

它是要搜索的组的名称,字符串,例如“管理员” – user1084440 2012-03-13 17:11:23

+0

在更改为使用域用户之前,您正在使用的应用程序池用户帐户是什么?它是一个本地用户帐户吗? 你能否在这里粘贴应用程序池用户帐户名? “GroupPrincipal.FindbyIdentity”显然需要将您的应用程序池用户帐户验证到Active Directory以执行LDAP查询。 – 2012-03-24 19:47:28

回答

0

你没有指定身份类型,但是你给它一个字符串。也许它不知道如何搜索字符串。例如,也许它假设字符串是一个GUID,然后试图解析它,然后失败。

试着这么做:

var groupPrin = GroupPrincipal.FindByIdentity(prinCon, IdentityType.Name , name); 

另外,尽量用一些凭据绝对有权执行这些操作,比如管理员或服务帐户设置你的PrincipalContext。

1

更改应用程序池帐户是为我工作。它是ApplicationPoolIdentity用户,但在我更改为Network Service后,此错误消失,AD代码正常工作。我希望这有帮助。

+0

谢谢!这也适用于我,但我已经部署这个Web应用程序超过一年,现在没有问题。突然间,我得到了这个错误,没有对这段代码做任何改变。我想知道是否有更新可以对此负责? – Crob 2016-02-10 18:05:05