Я не использовал ADAM или System.DirectoryServices, но у меня есть опыт работы с LDAP и AD; надеюсь, применимо следующее.
Я никогда не видел идентификатора пользователя, указанного в этом формате, прежде. (Похоже, что-то вроде относительного DN, как указано в конце запятой?) Вы пытались указать идентификатор пользователя в качестве полного DN (как требуется стандартным LDAP) или в виде пустого имени пользователя (если ADAM это поддерживает)?
При диагностике таких проблем с сетевым протоколом (когда я вижу, что моя программа делает то, что, я думаю, я ей говорю, и смотрю, как она работает по сравнению с тем, что делает работающая программа), я нашел это полезным запустить Wireshark как для неработающей, так и для работающей операции, чтобы увидеть, как они отличаются. Если вы никогда не использовали Wireshark, надеюсь, вам не составит труда начать работу:
- Загрузите, установите и запустите программное обеспечение.
- В разделе «Захват» нажмите «Параметры».
- Установите для интерфейса либо локальный хост / loopback, либо ваш интерфейс Ethernet. (Я не думаю, что loopback работает должным образом в Windows; возможно, вы захотите выбрать свой интерфейс Ethernet и обновить URL-адрес LDAP в своем коде C #, чтобы использовать ваше имя хоста, а не localhost.)
- В поле «Фильтр захвата» введите «TCP-порт 50000» (без кавычек).
- Нажмите Пуск, запустите операцию подключения, затем перейдите в меню «Захват» и нажмите «Стоп».
Wireshark может проанализировать протокол для вас, поэтому вам не нужно быть слишком знакомым с деталями протокола самостоятельно, хотя, чем больше вы знаете, тем легче интерпретировать все детали. Вы можете запустить пару экземпляров Wireshark, чтобы легко сравнить два разных захвата (ваш код и LDP).