无法快速响应AD检索

时间:2010-01-06 12:43:23

标签: c# sharepoint active-directory directoryservices

我正在开发一个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
                        }}}}

提前致谢

1 个答案:

答案 0 :(得分:0)

这里的一切似乎都很正常。我使用类似的东西,唯一值得一提的是我通常将“propertiesToLoad”参数传递给DirectoryEntry的构造函数,并将过滤器传递给DirectorySearcher的构造函数。

另一个区别是您使用DirectoryEntry的“用户名”和“密码” - 也许值得使用应用程序池标识?对于这些电话,我通常会SPSecurity.RunWithElevatedPrivileges(method pointer)