c# - 使用 NHibernate 和 Oracle 将连接字符串更新到 LDAP
问题描述
我继承了一个使用 NHibernate 和 FluentNibernate 连接到 Oracle 数据库的应用程序。不幸的是,我没有使用 NHibernate 的经验。当前的连接字符串是这样的:
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=hostname)(PORT=0000)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=servicename)));User Id={username};Password={password};
但现在需要切换到 LDAP(参见最后的代码片段)。
我的问题是,是否可以仅使用 LDAP 连接对 web.config 进行更改,或者我需要添加 Oracle.ManagedDataAccess 并进行一些代码更改?
据我了解,OracleClientConfiguration 已基于此页面被弃用,因此是关于新 nuget 包的问题的一部分。另一个注意事项,项目中没有 hibernate.cfg.xml 文件(我认为这可以吗?)但想知道这个项目是否没有使用 NHibernate 的最佳实践。任何其他提示或提示将不胜感激。
C#代码:
private ISessionFactory GetSessionFactory()
{
var connectionString = LoginHelper.GetConnectionString(ConnectionStringSetting, LoginInfoSetting);
var iSessionFactory
= Fluently
.Configure()
.Database(OracleClientConfiguration.Oracle10.ConnectionString(connectionString))
.Mappings(e => e.FluentMappings.AddFromAssembly(Assembly.GetExecutingAssembly()))
.BuildSessionFactory();
return iSessionFactory;
}
Web.config(Web.config 中没有其他对 NHibernate 的引用。在其他 dll.config 文件中有一些对dependentAssembly 的引用):
<configuration>
<configSections>
<section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
<configSections>
<configuration>
我(认为我)在 Web.config 中需要的是这样的:
<oracle.dataaccess.client> <!-- or <oracle.manageddataaccess.client>? -->
<version number="*">
<LDAPsettings>
<LDAPsetting name="DIRECTORY_SERVERS" value="" />
<LDAPsetting name="DIRECTORY_SERVER_TYPE" value="" />
<LDAPsetting name="DEFAULT_ADMIN_CONTEXT" value="" />
</LDAPsettings>
<settings>
<setting name="NAMES.DIRECTORY_PATH" value="" />
<setting name="LDAP_ADMIN" value="" />
</settings>
</version>
</oracle.dataaccess.client>
编辑 1: ldap.ora 文件的内容:
DIRECTORY_SERVERS=(ldap:XXX)
DEFAULT_ADMIN_CONTEXT="dc=Oracle,dc=com"
DIRECTORY_SERVER_TYPE=ad
解决方案
这是我为了让它工作而做的......
在 Oracle 文件夹结构中,导航到 Network 文件夹。
添加以下文件(应该能够复制并粘贴另一个名为 Sample 的文件夹):
- sqlnet.ora
- ldap.ora
- tnsnames.ora
sqlnet.ora(这里的关键是将 LDAP 添加到列表的开头):
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (LDAP, TNSNAMES, EZCONNECT)
ldap.ora:
DIRECTORY_SERVERS=(ldap:XXX:XXX)
DEFAULT_ADMIN_CONTEXT="dc=oracle,dc=com"
DIRECTORY_SERVER_TYPE=XX
tnsnames.ora:
No change was required; left as default
连接字符串:
<add name="connection" connectionString="Data Source=YourDataSource"/>
<!-- might need to add a username/password -->
推荐阅读
- android - 使用文件传输插件从科尔多瓦的 s3 服务器下载图像文件
- android - 为什么没有数据库文件
- cryptography - 了解明文组合规则、加密算法和 2 个密文块,如何找到明文和密钥
- azure - Azure 持久功能:JsonSerializationException 通过将复杂对象从触发器传递到协调器
- python - 每次我按下一个键时 CLI 清除屏幕
- wordpress - 单个 URL mod_rewrite 不断回到原始 URL
- java - Elasticsearch spring 实现错误
- r - 将因子分成 R 列
- java - 如果我们添加新分区,我们会在 Kafka Streams 中丢失消息吗?
- ios - 如何设置 AWS Appsync 请求超时限制 || AWSAppSync 客户端未提供回调