2009-08-17 14 views
0

Ich habe einen Client, der einen Webdienst aufruft, der dann AD trifft, um Informationen abzurufen.ASMX-Webdienste + Active Directory Frage

Kürzlich fing ich an, das folgende Verhalten zu haben.

nach einer langen Wartezeit oder einem IISReset, ruft der Client den Webdienst, der Web-Service zeigt den Aufruf, startet DirectoryEntry.RefreshCache() ;. (Das ist in einem Versuch Catch, die Ausnahmen protokollieren sollte)

Dann passiert nichts.

Ein paar Minuten später, ich sehe Aktivität auf dem gleichen Thread in den Web-Service-Protokolle,

aber kein Fehler zeigt immer in den Dienst oder die Client-Protokolle auf, einfach nichts.

Nach einer langen Wartezeit wird der Web-Service schließlich gut funktionieren, und der Aufruf der exakt gleichen Funktion führt zu einer Antwort in einer angemessenen Zeit.

interessanterweise der Anruf an den Web-Service, der hängt, ist nicht der erste Anruf, der Ad schlägt, es ist ein paar Anrufe nach unten. (Also in der Theorie ist es nicht die ursprüngliche Verbindung, ein Problem, das wir vorher hatten, und musste connectionprotection = none auf dem Mitgliedschaftsanbieter zu beheben)

So sind meine Fragen, macht die Wiederholung des Threads in der Protokolldatei zeigen an, dass der Thread beendet wurde? Wenn es beendet wird, warum bekomme ich keinen Fehler, es ist in einem Versuch zu fangen?

eine Idee warum DirectoryEntry.RefreshCache() dauert so lange?

+0

Stellt sich heraus, ich war falsch, RefreshCace() ganz gut erlischt. , aber beim Kopieren der DEs Eigenschaften auf meine lokale Kopie, stoppt es einfach entweder auf objectCategory oder nTSecurityDescriptor dann nichts ... Ist es möglich, dass es Speicher Korruption ist? Was macht ein Webservice, wenn ein Thread Speicherbeschädigung hat, tötet er es leise? Wird der Thread im Thread-Pool wiederverwendet? Ich würde irgendwie eine Ausnahme erwarten, zumindest auf dem Webservice. –

Antwort

0

Der seltsame Webservice Thread nie zurück oder werfen und Fehler, stellte sich als am meisten wie ein Memory Corruption Bug in der Klassenbibliothek, die ich verwendet, die die Eigenschaften auf eine lokale Kopie kopiert.

Ich benutze Speicherkorruption als meine beste Vermutung, ich habe es geschrieben, ohne die Bibliothek zu verwenden, um nur den Wert zu erhalten, den ich suchte, und das Problem ging weg.

Danke,

Eric-