2009-08-05 10 views
3

System.DirectoryServices.Protocolsで長時間実行されるAD検索をキャンセルする方法を試しています。誰も助けることができますか?私はそれはそれは、ここで定義されているLDAP拡張操作をキャンセルサポートしていないことだと思う私はsupportControl/supportedCapabilitiesを見てきましたSystem.DirectoryServices.Protocolsで長時間実行される検索を放棄する方法

がでrootDSEの属性と、彼らは1.3.6.1.1.8のOIDが含まれていない:http://tools.ietf.org/html/rfc3909

元のLDAP ABANDONコマンドが残ります(リストについてはhereを参照)。しかし、一致するようではありませんDirectoryRequest Class

誰もが考えている?

+0

私はこの1つに賞金を提供しています。これを初めて行ったのはどういうことなのでしょうか。 – serialhobbyist

答えて

1

私は私の答えを見つけたと思います:私はあなたの提案を読んでいましたが、Martin、私はLdapConnectionクラスのAbortメソッドを見つけました。私はそれを見つけることを期待していませんでした:私はそれをLDAPMessageと見なすと予想されたLDAP文書から始めましたが、MSの人は特殊なケースとして扱っているようです。 MS以外のLDAP実装に精通していて、MSのアプローチが典型的かどうかについてコメントできる人は、私の理解を深めていただければ幸いです。

0

私は思っていますが、私は肯定的ではない、キャンセルと非同期クエリがありません。それはasynchプロパティを持っていますが、それはコレクションを埋めることを許可することです。取り消しとは何も関係ありません。私が提供できる最良の方法は、あなたの質問をバックグラウンドのワーカースレッドに入れ、戻ってくるときに答えを扱う非同期コールバックを置くことです。ユーザーがキャンセルを決定した場合は、バックグラウンドワーカースレッドをキャンセルすることができます。 ldapサーバーがクエリーを終了するまで、LDAPサーバーを解放していなくても、アプリケーションを解放します。背景ワーカースレッドに関する情報は、http://www.c-sharpcorner.com/UploadFile/LivMic/BGWorker07032007000515AM/BGWorker.aspx で見つけることができます。メモリリークを防ぐためにアクティブディレクトリオブジェクトをクリーンアップするときは、.Dispose()を呼び出すことを忘れないでください。

+0

私はSystem.DirectoryServicesのDirectorySearcherについて話していません。私はあなただと思います。私はSystem.DirectoryServices.Protocolsを使って検索を実行することについて話しています。このリンクからわかるように、ADSIを使用せずにネイティブLDAPを使用し、ネイティブLDAPは非同期検索とキャンセル機能を備えているため、S.DS.Pを使用して非同期検索を行うことができます。私はドキュメントでそれを見つけることができません。私はサーバー上での影響があるため、検索を実行したままにしたくない。 – serialhobbyist

0

クエリでも多くのデータが生成される場合は、pagingによってそれらを放棄できます。クエリでPageResultRequestControlオプションを指定すると、ページサイズがかなり低くなります(IIUC、デフォルトのページサイズは1000)。 IIUCでは、ページを取得するたびに新しいリクエストを送信します(1つのレスポンスから次のリクエストにCookieを渡す)。クエリを取り消すことを選択した場合は、期待される結果がゼロの別の要求を送信します。

関連する問題