Вопрос по .net, com, ldap, asp.net – Почему при аутентификации по LDAP с DirectoryEntry периодически возникает исключение COMException (0x8007203A): «Сервер не работает»?

7

If anybody has a similar story, please post details below!

Я создаю веб-сайт ASP.NET, который должен поддерживать аутентификацию на основе LDAP.

В Windows аутентификация LDAP может выполняться через Active Directory (я не эксперт, но AD, кажется, просто особый вариант ldap). Я не управляю серверами AD и / или LDAP.

Я пробовал различные способы аутентификации, но я остановился на использовании одногоDirectoryEntry за попытку аутентификации:

using (DirectoryEntry de = new DirectoryEntry(ldapPath, ldapUsername, password, AuthenticationTypes.ServerBind)) {
    try {
        // Bind to the native AdsObject to force authentication.
        object obj = de.NativeObject;//not IDisposable
    } catch(...

Извлечение NativeObject вызываетCOMException если что-то пойдет не так, например, если проверка подлинности не удалась, исключение будет выглядеть как «Ошибка входа в систему: неизвестное имя пользователя или неверный пароль», а если сервер ldap недоступен или истекло время ожидания, что-то вроде «Сервер не эксплуатационное & Quot.

Это работает, в основном, но через переменное количество дней, всегда начинающееся с самого утра, мы получаем «Сервер не работает». пока IIS не будет перезапущен. Очевидно, что это не очень хорошее долгосрочное решение, но, насколько я могу судить, ошибка лежит в Com-объекте, лежащем в основе DirectoryEntry, - не то, что легко исправить.

это проблема ISN & APOS; т новый или же неизвестный, Некоторые люди прошли через поддержку Microsoft со смешанными результатами; в основном ответы, похоже, сводятся к тому, чтобы «выбрать путь ldap и создать несколько эквивалентных альтернатив, и, возможно, один из них сработает». Каждый раз, когда вы пытаетесь или, конечно, вы в течение нескольких дней не будете знать, действительно ли это сработало, и пока не будет найдено реальное решение, мы «возвращаемся к» перезагрузке серверов Windows каждую ночь ».

Для начала я попробовал пути ldap в формате

* "LDAP://server.uri:636"
* "LDAP://insecure.server.uri:389"
* "LDAP://server.uri:636/cn=username,ou=staff,o=myOrganisation,c=org"

Всегда с именем пользователя по следующей схеме:

* "cn=username,ou=staff,o=myOrganisation,c=org"

Все эти методы работают изначально, но терпят неудачу через переменное количество дней (и начинают работать после сброса IIS). Сервер работает под управлением IIS6 на win 2k3.

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

Что было сгруппировано? Сервер с вашим приложением или сервер с AD? Alfred Myers
Сервер, на котором работает приложение. Сервер LDAP на самом деле был не Windows-машиной, работающей где-то извне - я не уверен насчет его конфигурации. Кроме того, кажется, что проблемы возникают даже для UDP-соединений, созданных вручную, что позволяет предположить, что это нечто низкоуровневое. Eamon Nerbonne
Возможно, эта ошибка связана с параметрами кластеризации win 2k3 - мы мигрировали в некластерную систему с одним сервером, и последние несколько дней прошли без проблем. Eamon Nerbonne

Ваш Ответ

3   ответа
5

похоже, что она прекратилась после перехода на некластеризованный сервер.

Есть и другие странные факты об этой ошибке:

Restarting the asp.net host process isn't sufficient to fix the trouble. This is odd; you'd expect the OS to forcibly release resources on process death Restarting the IIS service doesn't release the resources (the UDP ports). netstat reveals the ports seem free, but all ports opened are actually opened by process #4 - the System process. Killing IIS (for instance via the IIS manager) does release the UDP ports, and then authentication works again.

В общем, это очень похоже на проблему с драйвером или ядром в win2k3 с включенной кластеризацией, а не с проблемой .NET.

Поэтому, если кто-то еще сталкивается с подобной проблемой, проверьте, включена ли кластеризация - это может сэкономить вам недели головной боли.

0

Я прочитал кое-что о проверке сNETSTAT и проверка состояния активных соединений. кратные значения времени ожидания могут указывать на проблему с перенаправлением портов. Тем не менее, я получаю ту же ошибку за последние 3 дня. Я попросил администратора сети изменить мои разрешения, и даже это не помогло. Статья обсуждает это более подробно: Приложение C # .NET теряет соединение с Active Directory

forums.techarena.in/active-directory/943180.htm не найдено

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