继我之前的
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
解决方法
从我在
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[]);