Веб-службы ASMX + вопрос Active Directory

У меня есть клиент, который вызывает веб-службу, которая затем обращается к AD для получения информации.

Недавно у меня началось следующее поведение.

после долгого ожидания или IISReset клиент вызывает веб-службу, веб-служба показывает вызов, запускает DirectoryEntry.RefreshCache();. (Который находится внутри try catch, который должен регистрировать любые исключения)

Тогда ничего не происходит.

Пару минут спустя я вижу активность в том же потоке в журналах веб-службы,

но ни в сервисе, ни в журналах клиента не появляется никаких ошибок, просто ничего.

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

интересно, что вызов веб-сервиса, который завис, НЕ является первым вызовом, который попадает в рекламу, это пара вызовов вниз. (Так что теоретически это не начальное соединение, проблема, которая у нас была раньше, и нам пришлось установить connectionprotection=none на поставщике членства, чтобы исправить)

Итак, мои вопросы: указывает ли повторение потока в файле журнала на то, что поток был завершен? Если он завершен, почему я не получаю сообщение об ошибке, это попытка перехвата?

есть идеи, почему DirectoryEntry.RefreshCache() занимает так много времени?


person Eric Brown - Cal    schedule 17.08.2009    source источник
comment
Оказывается, я ошибался, RefreshCace() работает нормально. но при копировании свойств DE в мою локальную копию он просто останавливается либо на objectCategory, либо на nTSecurityDescriptor, а затем ничего ... Возможно ли, что это повреждение памяти? Что делает веб-сервис, если у потока есть повреждение памяти, тихо ли он убивает его? Перерабатывается ли поток в пуле потоков? Я бы ожидал какого-то исключения, по крайней мере, в веб-сервисе.   -  person Eric Brown - Cal    schedule 18.08.2009


Ответы (1)


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

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

Спасибо,

Эрик-

person Eric Brown - Cal    schedule 19.08.2009