【问题标题】:Unable to response quickly to AD retrieval无法快速响应 AD 检索
【发布时间】:2010-01-06 12:43:23
【问题描述】:

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

提前致谢

【问题讨论】:

  • 系统事件日志中是否有任何 Schannel 错误? AD 的版本是什么(2000、2003 等)?
  • AD 适用于 2003 年。事件查看器似乎很好。

标签: c# sharepoint active-directory directoryservices


【解决方案1】:

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

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

【讨论】:

  • 我尝试了两种方法,但根本没有任何效果。应用程序池标识在 Active Directory 中没有所需的特权,例如将任何域成员添加到任何组。所以我必须从配置文件中获取凭据。
  • 你能举个例子,你的变量connectionStringfilter是什么样的?
  • 我的连接字符串是 LDAP://dcname/OU=ou1,OU=ou2,DC=dcname 我的过滤器是 (&(&(ObjectClass=person))(&(!memberOf=CN=学生,OU=UEPOU,DC=lst,DC=local)(!memberOf=CN=Instructors,OU=UEPOU,DC=lst,DC=local)(!memberOf=CN=Directors,OU=UEPOU,DC=lst, DC=local)(!userAccountControl:1.2.840.113556.1.4.803:=2))) 我知道这看起来很复杂,但这些变量适用于 LDAP 浏览器。
  • 不,LDAP 查询没问题。我只是认为查询可能太不具体,你得到了很多结果。但情况似乎并非如此。 ReferralChasing 是否故意设置为 All?我认为这可能需要一些时间。但是,它并没有解释为什么第一次执行速度快,第二次执行速度慢。
  • 感谢您的提示。我没有故意设置 ReferralChasing 属性。它是代码示例中最常见的 DirectorySearcher 属性。我会尝试将属性设置为 None 并在我开始工作时寻找结果。
猜你喜欢
  • 2015-10-17
  • 1970-01-01
  • 2022-11-16
  • 2018-05-02
  • 2019-04-26
  • 2016-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多