2009-08-05 9 views
3

ich versucht habe zu arbeiten, wie eine lang andauernde AD Suche in System.DirectoryServices.Protocols abzubrechen. Kann jemand helfen?Wie eine lang andauernde Suche in System.DirectoryServices.Protocols aufgeben

ich am supportControl/supportedCapabilities haben gesucht Attribute auf RootDSE und sie haben nicht die 1.3.6.1.1.8 enthalten OID so denke ich, dass es bedeutet, nicht die erweiterte LDAP-Vorgang abgebrochen unterstützt wie hier definiert: http://tools.ietf.org/html/rfc3909

Damit bleibt der ursprüngliche Befehl LDAP ABANDON (siehe Liste here). Aber es scheint keine passende DirectoryRequest Class zu geben.

Wer hat irgendwelche Ideen?

+0

Ich biete ein Kopfgeld auf dieses eine: das erste Mal habe ich das so nicht ganz sicher, was passiert. – serialhobbyist

Antwort

1

Ich glaube, ich habe meine Antwort gefunden: Während ich Ihren Vorschlag gelesen habe, Martin, bin ich auf die Abort Methode der LdapConnection Klasse gestoßen. Ich hatte nicht erwartet, es dort zu finden: Ausgehend von der LDAP-Dokumentation hatte ich erwartet, dass es nur eine weitere LDAP-Nachricht war, aber die MS-Leute scheinen es als Sonderfall behandelt zu haben. Wenn jemand mit einer Nicht-MS-Implementierung von LDAP vertraut ist und kommentieren kann, ob der MS-Ansatz typisch ist, würde ich mich darüber freuen, mein Verständnis zu verbessern.

0

Ich denke, aber ich bin nicht positiv, es gibt keine asynch Abfrage mit einem Abbrechen. Es hat eine asynch-Eigenschaft, aber es ist möglich, eine Sammlung zu füllen, nichts mit dem Abbrechen zu tun. Das Beste, was ich anbieten kann, ist, Ihre Abfrage in einen Hintergrund-Worker-Thread einzufügen und einen Asynch-Callback zu setzen, der sich mit der Antwort befasst, wenn sie zurückkommt. Wenn der Benutzer sich entscheidet abzubrechen, können Sie den Hintergrund-Worker-Thread einfach abbrechen. Sie werden Ihre App freigeben, auch wenn Sie den LDAP-Server erst freigegeben haben, nachdem die Abfrage beendet wurde. Sie können Informationen zu Hintergrund-Worker-Threads unter http://www.c-sharpcorner.com/UploadFile/LivMic/BGWorker07032007000515AM/BGWorker.aspx finden. Vergessen Sie nicht, .Dispose() aufzurufen, wenn Sie Ihre Active Directory-Objekte bereinigen, um Speicherlecks zu vermeiden.

+0

Ich spreche nicht über DirectorySearcher in System.DirectoryServices: Ich denke, du bist. Ich spreche über eine Suche mit System.DirectoryServices.Protocols. Wie Sie anhand der Links sehen können, ist es möglich, eine asynchrone Suche mit S.DS.P durchzuführen, da ADSI nicht verwendet wird, sondern natives LDAP verwendet wird und natives LDAP eine asynchrone Suche und eine Abbruchfunktion aufweist. Ich kann es einfach nicht in den Dokumenten finden. Ich möchte die Suche wegen der Auswirkungen auf den Server nicht laufen lassen. – serialhobbyist

0

Wenn die Abfrage auch viele Daten produzieren, können Sie sie durch paging verlassen. Geben Sie in der Abfrage eine PageResultRequestControl-Option an, die zu einer relativ niedrigen Seitengröße führt (IIUC, 1000 ist die Standardseitengröße). IIUC, Sie werden jedes Mal, wenn Sie eine Seite erhalten, neue Anfragen senden (die Übergabe von Cookies von einer Antwort an die nächste Anfrage). Wenn Sie die Abfrage abbrechen möchten, senden Sie eine weitere Anfrage mit den erwarteten Ergebnissen.