在使用托管ODP.NET时,如何从C#查询LDAP以解析Oracle TNS主机名?

继我之前的 Question,我设法用 help from the Oracle forums回答自己,我现在有另一个问题,从前一个问题(提供背景).

我希望直接从我的C#代码查询LDAP,以执行Oracle TNS主机名的LDAP查找,以获取连接字符串.这通常存储在tnsnames.ora中,我的组织使用LDAP(通过ldap.ora)使用Active Directory从LDAP服务器解析主机名.

但是,我在我的C#应用​​程序中使用ODP.NET,Managed Driver Beta(Oracle.ManagedDataAccess.dll),它不支持我在前面提到的Oracle forum reply指向的release notes中提到的LDAP.这就是我希望直接从C#查询LDAP的原因.

我找到了使用DirectoryEntry和DirectorySearcher执行此操作的方法here,但我不知道将什么作为参数添加到DirectorySearcher.我可以访问ldap.ora,其格式如下:

# LDAP.ORA Configuration
# Generated by Oracle configuration tools.
DEFAULT_ADMIN_CONTEXT = “dc=xx,dc=mycompany,dc=com”
DIRECTORY_SERVERS = (ldap_server1.mycompany.com:389:636,ldap_server2.mycompany.com:389:636,…) DIRECTORY_SERVER_TYPE = OID

但是,如何将其映射到在我的C#代码中设置LDAP查询?

解决方法

从我在 Oracle Database Name Resolution with OpenLDAP中找到的内容来看,代码看起来应该是这样的:
string directoryServer = "ldap_server1.mycompany.com:389";
string defaultAdminContext = "dc=xx,dc=com";
string oracleHostEntryPath = string.Format("LDAP://{0}/cn=OracleContext,{1}",directoryServer,defaultAdminContext);

var directoryEntry = new DirectoryEntry(oracleHostEntryPath) {AuthenticationType = AuthenticationTypes.None};
var directorySearcher = new DirectorySearcher(directoryEntry,"(&(objectclass=orclNetService)(cn=ABCDEFG1))",new[] { "orclnetdescstring" },SearchScope.Subtree);

string oracleNetDescription = Encoding.Default.GetString(des.FindOne().Properties["orclnetdescstring"][0] as byte[]);

相关文章

1:最直白的循环遍历方法,可以分为遍历key--value键值对以及...
private void ClearTextBox(){ foreach (var control in pnl...
原文叫看《墨攻》理解IOC概念 2006年多部贺岁大片以让人应接...
右击文件夹->安全选项卡->添加->高级-...