2009-08-05 29 views
3

我一直在試圖解決如何取消System.DirectoryServices.Protocols中長時間運行的AD搜索。誰能幫忙?如何放棄System.DirectoryServices.Protocols中長時間運行的搜索

我已經看過了supportControl/supportedCapabilities屬性上的RootDSE,他們不包含1.3.6.1.1.8 OID,所以我認爲這意味着它不支持LDAP取消擴展操作如下定義:http://tools.ietf.org/html/rfc3909

這留下了原始LDAP ABANDON命令(請參閱here的列表)。但似乎沒有匹配DirectoryRequest Class

任何人有任何想法?

+0

我提供了這個獎金:第一次我做了這個,所以不太確定會發生什麼。 – serialhobbyist 2009-08-12 07:56:30

回答

1

我想我已經找到了我的答案:當我讀到你的建議時,Martin,我碰到了LdapConnection類中的Abort方法。我沒想到會在那裏找到它:從LDAP文檔開始,我期望將它作爲另一個LDAPMessage來查找,但MS人員似乎將它視爲一種特殊情況。如果有人熟悉LDAP的非MS實現,並且可以評論MS方法是否典型,我希望能夠提高我的理解。

0

我認爲,但我不積極,沒有與取消異步查詢。它有一個異步的屬性,但它允許一個集合被填充,與取消無關。我可以提供的最好的方法是將您的查詢放入後臺工作線程,並設置一個異步回調,以便在返回時處理答案。如果用戶決定取消,您可以取消後臺工作線程。即使您沒有將ldap服務器釋放,直到它完成查詢,您也可以釋放您的應用程序。您可以在http://www.c-sharpcorner.com/UploadFile/LivMic/BGWorker07032007000515AM/BGWorker.aspx 找到有關後臺工作線程的信息。清理活動目錄對象以防止內存泄漏時,請不要忘記調用.Dispose()。

+0

我不是在談論System.DirectoryServices中的DirectorySearcher:我認爲你是。我正在討論使用System.DirectoryServices.Protocols進行搜索。正如您從鏈接中看到的那樣,可以使用S.DS.P進行異步搜索,因爲它不使用ADSI,但使用本機LDAP,並且本地LDAP具有異步搜索和取消功能。我無法在文檔中找到它。我不想讓搜索運行,因爲它可能會對服務器造成影響。 – serialhobbyist 2009-08-14 10:48:57

0

如果查詢也會產生很多數據,你可以通過paging放棄它們。在查詢中指定PageResultRequestControl選項,給出相當低的頁面大小(IIUC,1000是默認頁面大小)。 IIUC,您每次獲得頁面時都會發送新請求(將來自一個響應的Cookie傳遞給下一個請求)。當您選擇取消查詢時,發送另一個預期結果爲零的請求。