初始源码如下:
public bool open(String username,String password)
{
try
{
string url = $"ldap://{m_host}:{m_port}/{m_baseDn}";
String m_user = $"{username},{m_userDn}";
DirectoryEntry entry = new DirectoryEntry(url, m_user, password, AuthenticationTypes.None);
if (entry == null)
{
return false;
}
else
{
try
{
object native = entry.NativeObject;
return true;
}
catch (System.Exception ex)
{
throw new Exception(ex.Message);
}
}
}
catch(Exception ex)
{
throw ex;
}
}
结果始终出现Exception,异常代码如下:0x80005000
在网上查阅相关信息均是有关IIS设置的问题。
那么问题就来了,客户端访问ldap服务(使用ldap admin或ladp brower都可以正常访问,因此服务端不存在问题),不可能客户端还需要存在IIS,因此这个问题不可能是像网上所述。
而且本人使用java写了ldap访问的代码,一次验证通过。
此时突然一个想法一闪而过,DirectoryEntry构造函数中参数path(即代码中变量url)起头大小写的问题。(虽然java中使用小写ladp一次验证通过,可是不代码C#就可以通过)经过验证,果然就是这个问题。Bravo,经过自己搭建OpenLdap服务,学习ldap admin的使用,一天半终于搞定。
正确源码:
public bool open(String username,String password)
{
try
{
string url = $"LDAP://{m_host}:{m_port}/{m_baseDn}";
String m_user = $"{username},{m_userDn}";
DirectoryEntry entry = new DirectoryEntry(url, m_user, password, AuthenticationTypes.None);
if (entry == null)
{
return false;
}
else
{
try
{
object native = entry.NativeObject;
return true;
}
catch (System.Exception ex)
{
throw new Exception(ex.Message);
}
}
}
catch(Exception ex)
{
throw ex;
}
}