我正在开发一个SharePoint应用程序,它需要来自指定Windows Server 2003 Active Directory组织单位的用户。
首先,我并不关心DirectoryServices对象上的'Dispose'和'Close'操作。在这一点上,检索操作快速而成功。
但这导致了2次尝试后“服务器无法运行”错误。而这个错误使整个应用程序运行更糟,就像停止其他AD操作一样。
然后,我通过在每个DirectoryEntry,DirectorySearcher和SearchResultCollection对象上添加using语句来纠正此错误。
然后我已经达到了一点,我不再得到'服务器无法运行'错误。但是当我尝试使用DirectorySearcher.FindAll方法从AD 1或更多次检索用户时,第一个操作快速且成功,其他操作更慢但成功。它需要超时的持续时间。你能帮我解决一下这种减速的情况吗?
以下是示例代码:
using (DirectoryEntry directoryEntry = new DirectoryEntry(connectionString, userName, password))
{
using (DirectorySearcher search = new DirectorySearcher(directoryEntry))
{
search.SearchScope = SearchLevel.OneLevel;
search.ReferralChasing = ReferralChasingOption.All;
search.Filter = filter;
search.SizeLimit = 200;
//Limits the property count for search result
SetUserDirectorySearcherPropertiesToLoad(search);
using (SearchResultCollection result = search.FindAll())
{
foreach (SearchResult searchResult in result)
{
// Get user attributes
}}}}
提前致谢
答案 0 :(得分:0)
这里的一切似乎都很正常。我使用类似的东西,唯一值得一提的是我通常将“propertiesToLoad”参数传递给DirectoryEntry的构造函数,并将过滤器传递给DirectorySearcher的构造函数。
另一个区别是您使用DirectoryEntry的“用户名”和“密码” - 也许值得使用应用程序池标识?对于这些电话,我通常会SPSecurity.RunWithElevatedPrivileges(method pointer)
。