使用 NHibernate 和 Oracle 将连接字符串更新为 LDAP
Updating connection string to LDAP with NHibernate and Oracle
我继承了一个使用 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 并进行一些代码更改?
据我了解,基于此 page 已弃用 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
根据documentation应该是这样的:
<LDAPsettings>
<LDAPsetting name="DIRECTORY_TYPE" value="AD" />
<LDAPsetting name="DEFAULT_ADMIN_CONTEXT" value="dc=Oracle,dc=com"/>
</LDAPsettings>
或使用
<settings>
<setting name="TNS_ADMIN" value="C:\oracle\work"/>
</settings>
并在 C:\oracle\work\ldap.ora
文件中指定 LDAP 设置(结合 C:\oracle\work\sqlnet.ora
文件)。
我认为它仍然无效,但请查看
您可以使用简单的文本编辑器或使用配置工具修改配置文件OraProvCfg.exe
。会是这样的:
OraProvCfg.exe /action:config /product:odpm /frameworkversion:v4.0.30319 /providerpath:C:\oracle\product.1\Client_x64\odp.net\managed\common\Oracle.ManagedDataAccess.dll /set:settings\TNS_ADMIN:C:\oracle\network\admin
OraProvCfg.exe /action:config /product:odpm /frameworkversion:v4.0.30319 /providerpath:C:\oracle\product.1\Client_x64\odp.net\managed\common\Oracle.ManagedDataAccess.dll /set:LDAPsettings\DIRECTORY_TYPE:ad
请注意,您有一个 OraProvCfg.exe
用于 32 位 (x86) 和 64 位。 运行 与您的应用程序匹配的那个,(或者只是 运行 两者)。
这是我为了让它工作所做的...
在 Oracle 文件夹结构中,导航到网络文件夹。
添加以下文件(应该能够复制并粘贴另一个名为 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 -->
我继承了一个使用 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 并进行一些代码更改?
据我了解,基于此 page 已弃用 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
根据documentation应该是这样的:
<LDAPsettings>
<LDAPsetting name="DIRECTORY_TYPE" value="AD" />
<LDAPsetting name="DEFAULT_ADMIN_CONTEXT" value="dc=Oracle,dc=com"/>
</LDAPsettings>
或使用
<settings>
<setting name="TNS_ADMIN" value="C:\oracle\work"/>
</settings>
并在 C:\oracle\work\ldap.ora
文件中指定 LDAP 设置(结合 C:\oracle\work\sqlnet.ora
文件)。
我认为它仍然无效,但请查看
您可以使用简单的文本编辑器或使用配置工具修改配置文件OraProvCfg.exe
。会是这样的:
OraProvCfg.exe /action:config /product:odpm /frameworkversion:v4.0.30319 /providerpath:C:\oracle\product.1\Client_x64\odp.net\managed\common\Oracle.ManagedDataAccess.dll /set:settings\TNS_ADMIN:C:\oracle\network\admin
OraProvCfg.exe /action:config /product:odpm /frameworkversion:v4.0.30319 /providerpath:C:\oracle\product.1\Client_x64\odp.net\managed\common\Oracle.ManagedDataAccess.dll /set:LDAPsettings\DIRECTORY_TYPE:ad
请注意,您有一个 OraProvCfg.exe
用于 32 位 (x86) 和 64 位。 运行 与您的应用程序匹配的那个,(或者只是 运行 两者)。
这是我为了让它工作所做的...
在 Oracle 文件夹结构中,导航到网络文件夹。
添加以下文件(应该能够复制并粘贴另一个名为 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 -->