COMException(0x80005000):未知错误 - UserPrincipal.set_GivenName(String value)

时间:2014-09-03 15:21:51

标签: c# iis active-directory

我有以下代码在ASP.NET应用程序中调用:

public DomainUserInfo GetDomainUserInfoByName(string domain, string firstName, string lastName)
{
    string[] domainArray = domain.Split(',');
    foreach (string d in domainArray)
    {
        var principalContext = new PrincipalContext(ContextType.Domain, d);
        var userPrincipal = new UserPrincipal(principalContext) {GivenName = firstName, Surname = lastName};
        using (var searcher = new PrincipalSearcher(userPrincipal))
        {
            userPrincipal = (UserPrincipal) searcher.FindOne();
        }

        if (userPrincipal != null)
        {

            var domainUserInfo = new DomainUserInfo
            {
                FirstName = userPrincipal.GivenName,
                LastName = userPrincipal.Surname,
                Email = userPrincipal.EmailAddress,
                LanID = userPrincipal.SamAccountName,
                Extension = userPrincipal.VoiceTelephoneNumber,
                DomainName = d,
                NTAccountName = userPrincipal.Sid.Translate(typeof (NTAccount)).ToString()
            };

            return domainUserInfo;
        }
    }
    return null;
}

部署在某些服务器上但不在其他服务器上部署时会起作用,它会抛出异常:

[COMException (0x80005000): Unknown error (0x80005000)]
   System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) +386081
   System.DirectoryServices.DirectoryEntry.Bind() +36
   System.DirectoryServices.DirectoryEntry.get_AdsObject() +31
   System.DirectoryServices.PropertyValueCollection.PopulateList() +21
   System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry entry, String propertyName) +49
   System.DirectoryServices.PropertyCollection.get_Item(String propertyName) +135
   System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInitNoContainer() +288
   System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit() +37
   System.DirectoryServices.AccountManagement.PrincipalContext.Initialize() +118
   System.DirectoryServices.AccountManagement.PrincipalContext.ContextForType(Type t) +34
   System.DirectoryServices.AccountManagement.Principal.GetStoreCtxToUse() +37
   System.DirectoryServices.AccountManagement.UserPrincipal.set_GivenName(String value) +17
   Mfc.Inv.RM.Framework.ActiveDirectory.ActiveDirectoryManager.GetDomainUserInfoByName(String domain, String firstName, String lastName) +167

看起来这是在线上发生的:

var userPrincipal = new UserPrincipal(principalContext) {GivenName = firstName, Surname = lastName};

尝试设置GivenName对象的UserPrincipal属性时。

我完全不知道是什么导致了这种情况,特别是因为它适用于某些服务器,而不是其他服务器。我已经尝试编写一个控制台应用程序,它调用它在所有服务器上运行的相同代码,所以我猜它必须与IIS有关。

1 个答案:

答案 0 :(得分:0)

这是我正在做的事情,如果您将鼠标悬停在userFind上或对其执行QuickWatch,您将看到以下信息。还要注意我传递的IdentityType.SamAccountName

var pc = new PrincipalContext(ContextType.Domain, domainName, null, null);
var userFind = UserPrincipal.FindByIdentity(pc, IdentityType.SamAccountName, username);