Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法快速响应广告检索_C#_Sharepoint_Active Directory_Directoryservices - Fatal编程技术网

C# 无法快速响应广告检索

C# 无法快速响应广告检索,c#,sharepoint,active-directory,directoryservices,C#,Sharepoint,Active Directory,Directoryservices,我正在开发一个SharePoint应用程序,该应用程序需要来自指定Windows Server 2003 Active Directory组织单位的用户 首先,我不关心DirectoryServices对象上的“Dispose”和“Close”操作。在这一点上,检索操作快速而成功 但这会在尝试2次后导致“服务器无法运行”错误。这个错误使得整个应用程序的运行更糟糕,就像停止其他AD操作一样 然后,我通过在每个DirectoryEntry、DirectorySearcher和SearchResult

我正在开发一个SharePoint应用程序,该应用程序需要来自指定Windows Server 2003 Active Directory组织单位的用户

首先,我不关心DirectoryServices对象上的“Dispose”和“Close”操作。在这一点上,检索操作快速而成功

但这会在尝试2次后导致“服务器无法运行”错误。这个错误使得整个应用程序的运行更糟糕,就像停止其他AD操作一样

然后,我通过在每个DirectoryEntry、DirectorySearcher和SearchResultCollection对象上添加语句来纠正这个错误

然后,我已经达到一个点,我不再得到“服务器不运行”错误。但是,当我尝试使用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
                        }}}}

提前谢谢

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


另一个区别是,您正在为DirectoryEntry使用“用户名”和“密码”——也许值得使用应用程序池标识?我通常对这些调用执行
SPSecurity.RunWithElevatedPrivileges(方法指针)

系统事件日志中是否存在任何Schannel错误?广告的版本是什么(2000年、2003年等)?广告在2003年起作用。事件查看器看起来不错。我尝试了两种方法,但都没有任何效果。应用程序池标识在Active Directory中没有所需的特权,就像向任何组添加任何域成员一样。所以我必须从配置文件中获取凭据。你能举个例子,看看你的变量
connectionString
filter
是什么样子吗?我的连接字符串是LDAP://dcname/OU=ou1,OU=ou2,DC=dcname我的过滤器是(&(&(ObjectClass=person))(&(!memberOf=CN=Students,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
?我认为这可能需要一些时间。但是r、 它没有解释为什么第一次执行速度快,第二次执行速度慢。谢谢你的提示。我不是故意设置ReferralChasing属性的。它是代码示例中最常见的DirectorySearcher属性。我将尝试将该属性设置为None,并在开始工作时查找结果。