微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在使用托管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[]);

原文地址:https://www.jb51.cc/csharp/244510.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐