连接到LDAP服务器会抛出NullReferenceException
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了连接到LDAP服务器会抛出NullReferenceException相关的知识,希望对你有一定的参考价值。
我正在尝试使用here连接到指定System.DirectoryServices.AccountManagement
的在线测试LDAP服务器,如下所示:
try
{
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "ldap.forumsys.com:389", "dc=example,dc=com", "cn=read-only-admin,dc=example,dc=com", "password"))
{
using (var searcher = new PrincipalSearcher(new UserPrincipal(ctx )))
{
foreach (var result in searcher.FindAll().Take(usersCount))
{
DirectoryEntry de = result.GetUnderlyingObject() as DirectoryEntry;
}
}
}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
但它抛出以下异常:
你调用的对象是空的。
您能否告诉我的代码有什么问题以及如何连接到该LDAP服务器?
PS:我可以使用Apache Directory Studio连接到该服务器
堆栈跟踪 :
System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig(String serverName,ServerProperties&properties)在System.DirectoryServices.AccountManagement.PrincipalContext.DoServerVerifyAndPropRetrieval()处于System.DirectoryServices.AccountManagement.PrincipalContext..ctor(ContextType contextType,String name,String container, System.DirectoryServices.AccountManagement.PrincipalContext..ctor(ContextType contextType,String name,String container,String userName,String password)中的ContextOptions选项,String userName,String password)位于C:中的ConsoleApp1.Program.GetGroups(String userName) Users Simple Code source repos ConsoleApp1 ConsoleApp1 Program.cs:第48行
正如所说的here,问题可能是您尝试使用不支持此OpenLDAP的类PrincipalContext
连接到Apache Directory Studio,
所以一种方法是使用DirectoryEntry
类
使用DirectoryEntry它对我有用,如下所示:
using (var searcher = new DirectorySearcher(new DirectoryEntry("LDAP://ldap.forumsys.com:389/dc=example,dc=com", "", "", AuthenticationTypes.None)))
{
searcher.Filter = "((objectClass=person))";
searcher.PropertiesToLoad.Add("mail");//email
searcher.PropertiesToLoad.Add("givenName");//first name
searcher.PropertiesToLoad.Add("sn"); //last name
searcher.PropertiesToLoad.Add("telephoneNumber");
searcher.PropertiesToLoad.Add("description");
searcher.PropertiesToLoad.Add("memberOf"); // groups
var activeDirectoryStaffs = searcher.FindAll();
if (activeDirectoryStaffs != null)
{
for (int i = 0; i < activeDirectoryStaffs.Count; i++)
{
SearchResult result = activeDirectoryStaffs[i];
var Email = result.Properties.Contains("mail") ? (string)result.Properties["mail"][0]:null;
var Mobile = result.Properties.Contains("telephoneNumber") ? (string)result.Properties["telephoneNumber"][0] : null;
var FirstName = result.Properties.Contains("givenName") ? (string)result.Properties["givenName"][0] : null;
var LastName = result.Properties.Contains("sn") ? (string)result.Properties["sn"][0] : null;
var Description = result.Properties.Contains("description") ? (string)result.Properties["description"][0] : null;
}
}
}
以上是关于连接到LDAP服务器会抛出NullReferenceException的主要内容,如果未能解决你的问题,请参考以下文章
在Linux上的备用连接上抛出SunCertPathBuilderException的LDAP连接
使用 Shell 连接到 API 工作,但带有 Python 请求库会抛出 400 Client Error: Bad Request for url
连接到 LDAP 服务器会引发 NullReferenceException
LDAP抛出Error Code 3 - Timelimit Exceeded 异常,导致CAS连接报错