我有这个LDAP连接字符串:connectionString="LDAP://username:password@10.10.10.246:389/DC=ABC,DC=local"
Active Directory服务器为ABC.local
,IP 10.10.10.246
。
我正在使用此代码从活动目录中读取属性:
MembershipSection membershipSection = (MembershipSection)WebConfigurationManager.GetSection("system.web/membership");
string defaultProvider = membershipSection.DefaultProvider;
ProviderSettings providerSettings = membershipSection.Providers[defaultProvider];
string connectionStringName = providerSettings.Parameters["connectionStringName"];
string connectionString = WebConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString;
DirectoryEntry ent = new DirectoryEntry(connectionString);
string name = ent.Properties["l"].Value.ToString();
string Language = ent.Properties["st"].Value.ToString();
但出现错误"The server is not operational."
。我是否正在使用连接字符串或正在发生的事情。你能帮帮我吗?
答案 0 :(得分:0)
以下是有关ServerFault LDAP connection string和StackOverFlow
中an explanation here的说明你不应该在连接字符串中使用IP地址,这是一个坏习惯。
在你的情况下,我认为应该是这样的:LDAP://ABC.local/DC=ABC,DC=local
。
每次需要搜索AD中的对象时都可以使用此功能:LDAP://OU=Users,DC=ABC,DC=local
等等。
关于身份验证,有{{3}},它可以为您提供:
DirectoryEntry dirEntry = new DirectoryEntry(connectionString, username, password);
我希望有所帮助。
答案 1 :(得分:-1)
您的连接字符串不正确,您应该使用另一个字符串并以不同的方式初始化DirectoryEntry条目:
string connectionString="LDAP://10.10.10.246/DC=ABC,DC=com"; // You can use also simple "LDAP://DC=ABC,DC=com" without IP
DirectoryEntry ent = new DirectoryEntry(connectionString, userName, password);
string name = ent.Properties["name"].Value.ToString(); // Note that property 'l' has friendly name 'City', it's unavailable for domain object!