У меня есть приложение, работающее на сервере IIS 7, в этой программе мне нужно найти все группы, членом которых является текущий пользователь. Когда я захожу на веб-сайт с помощью браузера на сервере, он работает отлично, но когда я пытаюсь получить к нему доступ со своего компьютера, он продолжает генерировать исключение COM. Вот код, который я использую для получения групп пользователей.
private List<string> GetUserGroups(string userName)
{
//The list of strings for output.
List<string> output= new List<string>();
try
{
//creating a PrincipalContext object in a using block for easy disposal
using(PrincipalContext domain = new PrincipalContext(ContextType.Domain,"domain"))
//using(WindowsIdentity user = WindowsIdentity.GetCurrent())
{
//Creating a UserPrincipal from the PrincipalContext by finding the user that
//was passed to the function
//This is the line that keeps throwing the exception.
using (UserPrincipal user = UserPrincipal.FindByIdentity(domain,IdentityType.SamAccountName,userName))
{
//Checking to make sure the user was found.
if (user != null)
{
//Getting the users groups in a collection variable called groups
PrincipalSearchResult<Principal> groups = UserPrincipal.Current.GetAuthorizationGroups();
//IdentityReferenceCollection groups = user.Groups;
//This foreach loop goes through each result in the groups collection
foreach (Principal p in groups)
{
//check the result is a GroupPrincipal object and is not null
if (p is GroupPrincipal && p.ToString() != null)
{
output.Add(p.ToString());//Add the string value to the output list.
debugString += "<br/>"+p.ToString();
}
}
}
}
}
}
catch (Exception ex)
{
processLog.Text += ex.ToString()+ ex.GetType();
}
//return the list of groups the user is a member of.
return output;
}
Почему возникает исключение, когда я обращаюсь к нему не с сервера, а с другого места? Как я могу это исправить?
Обновление: вот исключение stacktrace и все
System.Runtime.InteropServices.COMException (0x80072020): произошла ошибка операции. в System.DirectoryServices.DirectoryEntry.Bind (Boolean throwIfFail) в System.DirectoryServices.DirectoryEntry.Bind () в System.DirectoryServices.DirectoryEntry.get_AdsObject () в System.DirectoryServices.PropertyValueCollection.PopulateVervices .. ctor (запись DirectoryEntry, String propertyName) в System.DirectoryServices.PropertyCollection.get_Item (String propertyName) в System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInitNoContainer () в System.DirectoryDirectoryInitNoContainer () в System.DirectoryDirectoryInitNoContainer () в System.DirectoryDirectoryAccountManagementServices.AccountManagement.PackageServices. .PrincipalContext.Initialize () в System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx () в System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelper (контекст основного контекста, идентификатор System.DirectoryType, идентификатор System.DirectoryType) ectoryServices.AccountManagement.Principal.FindByIdentityWithType (контекст PrincipalContext, Type PrincipalType, IdentityType identityType, String identityValue) в System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity.AccountManagement.UserPrincipal. в C: \ ResetUnlockAccount \ ResetUnlockAccount \ ResetUnlockAccount.aspx.cs: строка 894
InnerException
, который оборачивается исключением COM? - person Lynn Crumbling   schedule 16.06.2014(ex.InnerException != null)
; если это так,processLog.Text += ex.InnerException.ToString());
- person Lynn Crumbling   schedule 16.06.2014