Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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# .net ldap opends读取自定义属性0x8000500c_C#_.net_Ldap_Opends - Fatal编程技术网

C# .net ldap opends读取自定义属性0x8000500c

C# .net ldap opends读取自定义属性0x8000500c,c#,.net,ldap,opends,C#,.net,Ldap,Opends,我正在尝试为我的.Net应用程序构建一个功能,使其能够与LDAP服务器通信以读取用户属性并对用户进行身份验证。我已经使用OpenDS设置了一个测试目录服务器,添加了自定义属性和对象,并添加了具有新对象类型的用户。在我尝试读取自定义属性值之前,一切正常,我得到: {"Unknown error (0x8000500c)"} at System.DirectoryServices.PropertyValueCollection.PopulateList() at System.DirectorySe

我正在尝试为我的.Net应用程序构建一个功能,使其能够与LDAP服务器通信以读取用户属性并对用户进行身份验证。我已经使用OpenDS设置了一个测试目录服务器,添加了自定义属性和对象,并添加了具有新对象类型的用户。在我尝试读取自定义属性值之前,一切正常,我得到:

{"Unknown error (0x8000500c)"}
at System.DirectoryServices.PropertyValueCollection.PopulateList()
at System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry entry, String propertyName)
at System.DirectoryServices.PropertyCollection.get_Item(String propertyName)
我尝试了(使用正确格式的OID)和(在ldap路径中使用完全限定的域名-我使用的是类似ldap://mymachine.company.local/…)的建议。由于COM错误代码表示E_ADS_CANT_CONVERT_数据类型,因此我的属性或架构有问题,但属性设置为DirectoryString,我可以读取相同类型的其他默认字段

我知道使用OpenDS的工作方式与Active Directory的工作方式不同,我有一个单独的AD模块可以正常工作,我只是想知道是否有人有过使用OpenDS或Sun One LDAP实现的经验

想法?我在谷歌上找不到太多关于OpenDS和.NET的信息,这让我觉得我应该做些别的事情。正如我所说的,广告的东西很好用,但是我真的很想用OpenDS也能做到这一点

谢谢


Rusty

使用已知的良好工具,如
ldapsearch
,验证LDAP客户端是否确实可以请求和接收所需的条目和属性。例如:

ldapsearch --hostname hostname \
           --port port \
           --bindDn your-auth-id \
           --bindPassword credentials-for-your-auth-id \
           --useSSL     \
           --trustAll \
           --baseDn your-base-object \
           --searchScope the-scope-you-use \
           '(&)' \
           your-custom-attribute-names
使用与LDAP客户端代码中相同的参数。如果上述搜索成功,则服务器配置正确,条目存在,并且auth ID具有检索这些条目和自定义属性的权限。否则,它们可能是LDAP客户端代码中的问题

另见

我试图从linux OpenLdap数据库读取多值字符串时出错

当我发现错误发生在XP和Server 2003上时,这看起来像是一个bug,但无论安装了什么.NET版本,Windows 7和Server 2008上的相同代码都会返回值

然而,我发现C#的一个解决办法是使用更直接的访问。除了Directory.Services之外,您还需要添加引用COM“ActiveDS类型库”

var dirEntry = new DirectoryEntry("ldapDn", "logonDn", "logonPass");
var nativeEntry = (ActiveDs.IADsPropertyList)dirEntry.NativeObject;
var propEntry = (ActiveDs.IADsPropertyEntry)nativeEntry.GetPropertyItem("attributeName", 3);
foreach (ActiveDs.IADsPropertyValue propValue in (object[])propEntry.Values)
{
    Debug.Print(propValue.CaseIgnoreString);
}

这是为了满足我自己的简单需求而准备的。这是我的建议。

嗨,特里,谢谢你的建议。我使用了与OpenDS一起安装的ldapsearch实用程序,一切似乎都很好。我还下载了ApacheDirectoryStudio,读取自定义属性没有问题。我开始认为标准的.net DirectoryServices库不适合这个……是的。