Приложение asp.net userprincipal.findbyidentity работает с браузером на сервере, выдает исключение с моей машины

У меня есть приложение, работающее на сервере 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


person Tory Hill    schedule 16.06.2014    source источник
comment
Есть ли объект InnerException, который оборачивается исключением COM?   -  person Lynn Crumbling    schedule 16.06.2014
comment
@LynnCrumbling, я попытался распечатать его, и он сказал, что я пытался получить доступ к нулевому значению, так что нет, я так не думаю, я попробую еще раз, чтобы убедиться.   -  person Tory Hill    schedule 16.06.2014
comment
В свой улов вы можете добавить чек на (ex.InnerException != null); если это так, processLog.Text += ex.InnerException.ToString());   -  person Lynn Crumbling    schedule 16.06.2014
comment
Я только что сделал это, и внутреннего исключения нет, исключение out - System.Runtime.InteropServices.COMException   -  person Tory Hill    schedule 16.06.2014
comment
COM должен выдавать вам код ошибки ... в десятичном или шестнадцатеричном формате. Это будет бесценно для поиска в Google.   -  person Lynn Crumbling    schedule 16.06.2014
comment
Также - на какой строке это исключение?   -  person Lynn Crumbling    schedule 16.06.2014
comment
Я указал на строку в исходном коде, ее на UserPrincipal.FindByIdentity, и где мне найти этот код?   -  person Tory Hill    schedule 16.06.2014
comment
Прости; пропустил это, когда я пошел сканировать, чтобы найти это.   -  person Lynn Crumbling    schedule 16.06.2014
comment
Посмотрите, есть ли у этого сообщения подходящие ответы.   -  person Lynn Crumbling    schedule 16.06.2014
comment
Кроме того, вы можете опубликовать вывод ex.ToString (), exception, stacktrace и все ...   -  person Lynn Crumbling    schedule 16.06.2014
comment
И последнее соображение: есть ли какие-либо свидетельства в журнале событий?   -  person Lynn Crumbling    schedule 16.06.2014
comment
@LynnCrumbling Я проверяю эту ссылку, похоже, код ошибки тот же, поэтому я посмотрю, смогу ли я разобраться, большое спасибо за вашу помощь   -  person Tory Hill    schedule 16.06.2014
comment
Удачи. Я все еще чувствую, что с этим сообщением об исключении должна быть выплюнута шестнадцатеричная ошибка COM.   -  person Lynn Crumbling    schedule 16.06.2014
comment
Ой! Есть - 0x80072020   -  person Lynn Crumbling    schedule 16.06.2014
comment
Тогда также взгляните на: stackoverflow.com/q/7969425/656243   -  person Lynn Crumbling    schedule 16.06.2014
comment
И, наконец, stackoverflow.com/a/15001395/656243   -  person Lynn Crumbling    schedule 16.06.2014
comment
А пока я заткнусь и позволю вам исследовать. Не забудьте вернуться и написать ответ. Я уверен, что в ближайшие час или около того ты получишь откровение.   -  person Lynn Crumbling    schedule 16.06.2014
comment
Ответ был найден здесь: stackoverflow.com/ questions / 7969425 / Спасибо Lynn Crumbling за ссылки, просто нужно было добавить using System.Web.Hosting; и используя (HostingEnvironment.Impersonate ()) вместо первого использования в исходном коде.   -  person Tory Hill    schedule 16.06.2014
comment
Не могу ответить на свой вопрос, недостаточно репутации   -  person Tory Hill    schedule 16.06.2014


Ответы (1)


Согласно комментарию OP,

Ответ был найден здесь: Метод GroupPrincipal FindByIdentity вызывает странное исключение

Просто нужно было добавить using System.Web.Hosting; и using(HostingEnvironment.Impersonate()) при первом использовании в исходном коде.

person Lynn Crumbling    schedule 16.06.2014