当前位置: 首页 > 编程语言 > C#

ActiveDirectoryError0x8000500cWhenTraversingAttributesSharing

时间:2023-04-11 03:21:23 C#

ActiveDirectoryError0x8000500cWhileTraversingAttributes我得到以下片段(SomeName/SomeDomain包含我代码中的实际值)varentry=newDirectoryEntry("LDAP://CN=SomeName,OU=AllGroups,dc=SomeDomain,dc=com");foreach(entry.Properties中的对象属性){Console.WriteLine(property);它为前21个属性打印OK,但随后失败:COMException{"Unknownerror(0x8000500c)"}atSystem.DirectoryServices.PropertyValueCollection.PopulateList()atSystem.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntryentry,StringpropertyName)在System.DirectoryServices.PropertyCollection.PropertyEnumerator.get_Entry(System.DirectoryServices.PropertyCollection.PropertyEnumerator.get_Current()在ActiveDirectory.Tests.IntegrationTests.ObjectFactoryTests.TestMethod1()在MyTests.cs:line22为什么?我怎样才能阻止它?更新这是一个失败的自定义属性。我在枚举属性之前尝试使用entry.RefreshCache()和entry.RefreshCache(new[]{"theAttributeName"}))(没有帮助)。UPDATE2entry.InvokeGet("theAttributeName")有效(并且没有RefreshCache)。有人可以解释为什么吗?UPDATE3如果我向项目提供FQDN,它会起作用:LDAP://srv00014.ssab.com/CN=SomeName,xxxxBounty我正在寻找解决以下问题的答案:机器访问自定义属性(登录用户的凭据不没关系),您需要传递要访问的对象的完全限定名称,否则客户端计算机上的模式缓存不会正确刷新,永远不要调用您进行的所有schema.refresh()调用在这里找到它。鉴于问题的更新,这听起来像是你的问题。在此处使用Err.exe工具http://www.microsoft.com/download/en/details.aspx?id=985吐出:Forhex0x8000500c/decimal-2147463156:E_ADS_CANT_CONVERT_DATATYPEadserr.hdirectorydatatypecannotbeconvertedto/从本机DS数据类型中找到“0x8000500c”的1个匹配项Google搜索“目录数据类型无法转换为本机/从本机转换”并找到此KB:http://support.microsoft.com/kb/907462我有同样的失败。通过列出DirectoryEntry的属性,我已经阅读并看到了很多关于错误0x8000500c的信息。我可以通过ProcessMonitor(Sysinternals)看到我的进程已经读取了一个模式文件。此架构文件保存在C:UsersxxxxAppDataLocalMicrosoftWindowsSchCachexyz.sch下。删除了这个文件,程序运行良好:)我刚遇到这个问题,我的是一个网络应用程序。我有一些代码可以从IIS中的Windows身份验证中提取用户并从AD中提取信息。使用(varcontext=newPrincipalContext(ContextType.Domain)){varname=UserPrincipal.Current.DisplayName;varprincipal=UserPrincipal.FindByIdentity(context,this.user.Identity.Name);if(principal!=null){this.fullName=principal.GivenName+""+principal.Surname;}else{this.fullName=string.Empty;这在我的测试中工作正常,但是当我发布网站时,我在FindByIdentity调用错误中得到了这个。我使用正确的用户修复了网站的应用程序池。一旦我解决了这个问题,它就开始工作了。我对奇怪数据类型的自定义属性有同样的问题。我有一个可以提取价值的实用程序,但服务中的一些结构化代码没有。该实用程序直接使用SearchResult对象,而服务使用DirectoryEntry。它蒸馏出来。SearchResult结果;结果.Properties[customProp];//可能对你有用result.Properties[customProp][0];//为我工作。请参阅下面使用(DirectoryEntryentry=result.GetDirectoryEntry()){entry.Properties[customProp];//失败entry.InvokeGet(customProp);//对于奇怪的数据也失败了}我的直觉是SearchResult不是强制执行者,而是返回它拥有的任何东西。当它转换为DirectoryEntry时,这段代码会抛出奇怪的数据类型,以至于InvokeGet也会失败。我使用extra[0]的实际提取代码如下所示:byte[]bytes=(byte[])((result.Properties[customProp][0]));StringcustomValue=System.Text.Encoding.UTF8.GetString(bytes);我从网站上的另一篇文章中摘录了第二行。以上就是C#学习教程:遍历属性时,ActiveDirectory错误0x8000500c分享的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: