Ошибка 0x80005000 и DirectoryServices

Я пытаюсь выполнить простой запрос LDAP, используя службы каталогов в .Net.

    DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://someserver.contoso.com/DC=contoso,DC=com");
    directoryEntry.AuthenticationType = AuthenticationTypes.Secure;

    DirectorySearcher directorySearcher = new DirectorySearcher(directoryEntry);

    directorySearcher.Filter = string.Format("(&(objectClass=user)(objectCategory=user) (sAMAccountName={0}))", username);

    var result = directorySearcher.FindOne();
    var resultDirectoryEntry = result.GetDirectoryEntry();

    return resultDirectoryEntry.Properties["msRTCSIP-PrimaryUserAddress"].Value.ToString();

И я'м получаю следующее исключение:

System.Runtime.InteropServices.COMException (0x80005000): Unknown error (0x80005000)
  at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
  at System.DirectoryServices.DirectoryEntry.Bind()
  at System.DirectoryServices.DirectoryEntry.get_AdsObject()
  at System.DirectoryServices.DirectorySearcher.FindAll(Boolean findMoreThanOne)
  at System.DirectoryServices.DirectorySearcher.FindOne()

Как фрагмент в Консольном приложении, это работает. Но когда я запускаю его как часть службы WCF (работающей с теми же учетными данными), он выдает вышеупомянутое исключение.

Какие-либо предложения?

Спасибо

Ответы на вопрос(11)

Эта ошибка может возникнуть, если на физическом компьютере не хватает памяти. В моем случае я размещал сайт на IIS, пытаясь получить доступ к AD, но серверу не хватило памяти.

У меня также была эта ошибка, и для меня это была OU с косой чертой в имени: "Группы доступа к файлам / папкам ".

этоветка форума указал мне в правильном направлении. В итоге звоню.Replace("/","\\/") На каждом пути значение перед использованием решило проблему для меня.

 Panda18 авг. 2016 г., 10:31
Большое спасибо, это была моя проблема! После двухдневной попытки выяснить права доступа мы обнаружили, что была создана OU с косой чертой в имени.

У меня было то же самое снова и снова, и ничто, казалось, не помогало.

Изменение пути отldap:// вLDAP:// сделал свое дело.

 Stefan Vasiljevic19 авг. 2016 г., 15:15
WAAAAAAAAT ??! Потратив 2 часа на этот LDAP, я решил свою проблему!
 sss11118 апр. 2018 г., 22:06
Это действительно спасатель рад, что прошло всего лишь час, прежде чем я увидел это .....
 Adam Rodger11 сент. 2012 г., 16:59
Это исправило это и для меня. LDAP должен быть заглавными буквами.
 Alexei16 авг. 2018 г., 09:55
Weren»Все ресурсы, связанные с MS / Windows, должны быть нечувствительны к регистру? Благодарю.
 Falco Alexander16 мая 2016 г., 11:05
отличный ответ для меня. особенно если вы работаете с powershell, вы не привыкли к написанию с учетом регистра
 Okonomiyaki300013 авг. 2018 г., 10:14
WTAF? Спасибо за этот драгоценный ответ, но ... почему? Зачем????

где я живу ... Веб-страница, на которой привязка LDAP перестала работать после изменения IP-адреса.

Решение ... ... Я установил базовую аутентификацию для устранения неисправностей, указанных здесь:https://support.microsoft.com/en-us/kb/329986

И после этого все только начало работать. Даже после того, как я снова отключил базовую аутентификацию на странице, которую я тестировал, все остальные страницы снова начали работать с аутентификацией Windows.

С уважением, АкаCIO

Решение Вопроса

Когда вы запускаете консольное приложение, оно запускается с вашими учетными данными, например, как "вы".

Служба WCF работает где? В IIS? Скорее всего, он работает под отдельной учетной записью, которой не разрешено запрашивать Active Directory.

Вы можете либо попытаться заставить работать олицетворение WCF, чтобы передать ваши собственные учетные данные, либо указать имя пользователя / пароль при создании DirectoryEntry:

DirectoryEntry directoryEntry = 
    new DirectoryEntry("LDAP://someserver.contoso.com/DC=contoso,DC=com", 
                       userName, password);

Хорошо, так что это может быть не учетные данные в конце концов (этообычно это происходит более чем в 80% случаев, которые я вижу).

Как насчет изменения вашего кода немного?

DirectorySearcher directorySearcher = new DirectorySearcher(directoryEntry);
directorySearcher.Filter = string.Format("(&(objectClass=user)(objectCategory=user) (sAMAccountName={0}))", username);

directorySearcher.PropertiesToLoad.Add("msRTCSIP-PrimaryUserAddress");

var result = directorySearcher.FindOne();

if(result != null)
{
   if(result.Properties["msRTCSIP-PrimaryUserAddress"] != null)
   {
      var resultValue = result.Properties["msRTCSIP-PrimaryUserAddress"][0];
   }
}

Моя идея такова: почему бы не рассказатьDirectorySearcher сразу же, какой атрибут тызаинтересованы? Тогда ты неТ нужно сделать еще один дополнительный шаг, чтобы получить полныйDirectoryEntry из результата поиска (должно быть быстрее), и поскольку вы сказали поисковику каталогов найти это свойство, оно 'безусловно, будет загружен в результате поиска - так что если этоЕсли значение равно NULL (значение не установлено), вы сможете легко его получить.

Марси»

 marc_s12 нояб. 2009 г., 17:34
Хорошо. Можете ли вы пройтись по коду (или написать сообщения трассировки), чтобы выяснить, где именно это исключение происходит?
 marc_s12 нояб. 2009 г., 17:35
0x80005000 довольношаблонный» ошибка и может означать что угодно ......
 GodEater12 нояб. 2009 г., 17:23
Я вошел на сервер, на котором запущен этот процесс, в качестве учетной записи службы. Я настроил службу WCF для запуска - так что они наверняка используют одинаковые учетные данные?

На сайтах, размещенных IIS, попробуйте перезапустить пул приложений. Это исправило мою проблему. Спасибо

 myroslav27 авг. 2018 г., 18:51
Это исправило это для меня! Спасибо.
 Ernest28 авг. 2018 г., 20:08
Круто, яЯ рад, что ты сделал это. Дело не всегда в том, что у нас есть возможность внести изменения в код, чтобы исправить проблему, подобную этой, особенно когда мы неЯ не владею или не имею кода, поэтому такие вещи очень помогают :).

В контексте Ektron эта проблема решается путем установки "Совместимость с метабазой IIS6 » особенность в Windows:

Проверьте 'Возможности системы Windows' или же 'Ролевые Услуги для совместимости с метабазой IIS6 добавьте, если отсутствует:

Ref:https://portal.ektron.com/KB/1088/

 Malachi27 сент. 2017 г., 23:40
Для моей конкретной проблемы (ошибка OP, но я собирался для IIS, а не LDAP), это решило ее. Спасибо

если в DirectoryEntry.Patch ничего нет после символовLDAP //:», Необходимо проверить directoryEntry.Path перед directorySearcher.FindOne (). Если явно не указан домен, и не нужноLDAP: //».

private void GetUser(string userName, string domainName)
{
     DirectoryEntry dirEntry = new DirectoryEntry();

     if (domainName.Length > 0)
     {
          dirEntry.Path = "LDAP://" + domainName;
     }

     DirectorySearcher dirSearcher = new DirectorySearcher(dirEntry);
     dirSearcher.SearchScope = SearchScope.Subtree;
     dirSearcher.Filter = string.Format("(&(objectClass=user)(|(cn={0})(sn={0}*)(givenName={0})(sAMAccountName={0}*)))", userName);
     var searchResults = dirSearcher.FindAll();
     //var searchResults = dirSearcher.FindOne();

     if (searchResults.Count == 0)
     {
          MessageBox.Show("User not found");
     }
     else
     {
          foreach (SearchResult sr in searchResults)
          {
              var de = sr.GetDirectoryEntry();
              string user = de.Properties["SAMAccountName"][0].ToString();
              MessageBox.Show(user); 
          }        
     }
}

У меня была та же ошибка - в моем случае это была дополнительная косая черта в аргументе пути, которая имела значение.

ПЛОХОЙ:

DirectoryEntry directoryEntry = 
    new DirectoryEntry("LDAP://someserver.contoso.com/DC=contoso,DC=com/", 
                       userName, password);

ХОРОШО:

DirectoryEntry directoryEntry = 
    new DirectoryEntry("LDAP://someserver.contoso.com/DC=contoso,DC=com", 
                       userName, password);

Просто к вашему сведению, у меня была та же ошибка, и я использовал правильные учетные данные, но мой URL-адрес LDAP был неправильным :(

Я получил точно такое же сообщение об ошибке и код

Потратил день на мою похожую проблему, но все эти ответы неТ помочь.

Оказалось, в моем случае я невключить аутентификацию Windows в настройках IIS ...

 Rolf24 апр. 2018 г., 08:43
Если вам нужно вернуться к пользователю пула приложений, вы можете сделать это с помощью "expersonating» для вызова AD: использование (WindowsIdentity.Impersonate (IntPtr.Zero)) {/ * AD-Access * /}

Ваш ответ на вопрос