ProKiLL
@ProKiLL
Системный администратор

Как избавиться от зависания проги в C# при работе с AD?

Наличие:
Программа где происходит авторизация согласно текущего пользователя ПК авторизованного в домене bis.ural.ru

- функция
/// <summary>
/// Вывод ФИО из Active Directory
/// </summary>
/// <param name="uLogin">Имя пользователя</param>
private string getUser(string uLogin)
        {
            string filter = string.Format("(&(ObjectClass={0})(sAMAccountName={1}))", "person", uLogin);
            string domain = "bis.ural.ru";
            string[] properties = new string[] { "fullname" };

            DirectoryEntry adRoot = new DirectoryEntry("LDAP://" + domain, null, null, AuthenticationTypes.Secure);
            DirectorySearcher searcher = new DirectorySearcher(adRoot);
            searcher.SearchScope = SearchScope.Subtree;
            searcher.ReferralChasing = ReferralChasingOption.All;
            searcher.PropertiesToLoad.AddRange(properties);
            searcher.Filter = filter;

            SearchResult result = searcher.FindOne();
            DirectoryEntry directoryEntry = result.GetDirectoryEntry();

            string displayName = directoryEntry.Properties["displayName"][0].ToString();
            //MessageBox.Show(displayName);
            return displayName;
        }


-Вызываем:
string User_domain = getUser(Environment.UserName.ToString());


Проблема
При работе зависает на строке SearchResult result = searcher.FindOne();

После 2-5 сек. программа пропускает данную функцию и продолжает работать.

В чем проблема понять не могу. Подскажите как исправить данную ситуацию или подскажите другой метод получения данных из AD
  • Вопрос задан
  • 333 просмотра
Пригласить эксперта
Ответы на вопрос 2
Nipheris
@Nipheris Куратор тега C#
Попробуйте поработать с этим флагом: https://msdn.microsoft.com/en-us/library/system.di... , т.к. вам нужно выполнять запрос к AD асинхронно.
Ответ написан
@dmitryKovalskiy
программист средней руки
Возможно вы вызываете сей метод из потока интерфейса. Там любая длительная операция будет "замораживать" программу.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы