编辑(找到工作解决方案!):
由于某些原因,我的应用程序不会拾取tnsname文件,除非我从.ora文件中删除了其他命名方法(命名方法的顺序,tnsnames, EZCONNECT, LDAP),可以看到优先级的顺序是正确的。我不想从sqlnet中删除这些命名方法。ora文件而是通过添加以下设置这是Dan Keller建议的结合TNS_ADMIN设置Oracle能够获取TNS名称文件。为了明确设置元素是这样的
<settings>
<setting name="NAMES.DIRECTORY_PATH" value="TNSNAMES"></setting>
<setting name="TNS_ADMIN" value="d:oracleproduct11.2.0client_1networkadmin"/>
</settings>
我有一个web应用
我已经从Nuget下载了以下Oracle管理数据访问https://www.nuget.org/packages/Oracle.ManagedDataAccess/12.1.22
开发服务器上的oracle客户端是11.2.0.3 32位
我已经设置了我的网页。配置包含以下
<settings>
<setting name="TNS_ADMIN" value="d:oracleproduct11.2.0client_networkadmin"/>
</settings>
</version>
但是我得到以下错误:
OracleInternal.Network的类型初始化器。AddressResolution'抛出了一个异常。
任何建议吗?谢谢。
[编辑]下面是异常
中的更多信息 OracleInternal.Network的类型初始化器。AddressResolution'抛出了一个异常。在OracleInternal.Network.AddressResolution。解析(String TNSAlias, connectionoptions &CO,字符串instanceName)在OracleInternal.ConnectionPool.PoolManager 3.ResolveTnsAlias(ConnectionString cs)
at OracleInternal.ConnectionPool.PoolManager
初始化(ConnectionString cs)在OracleInternal.ConnectionPool.OraclePoolManager。初始化(ConnectionString cs)在OracleInternal.ConnectionPool.OracleConnectionDispenser 3.GetPM(ConnectionString cs, PM conPM, ConnectionString pmCS, SecureString securedPassword, SecureString securedProxyPassword, Boolean& bAuthenticated, Boolean& newPM)
at OracleInternal.ConnectionPool.OracleConnectionDispenser
获取(ConnectionString cs, PM conPM, ConnectionString pmCS, SecureString securedPassword, SecureString securedProxyPassword)在Oracle.ManagedDataAccess.Client.OracleConnection.Open ()
Oracle Managed不使用TNS Name文件,而是在app/web中使用自定义配置部分。配置文件。您可以使用Oracle 12托管驱动程序连接到Oracle 11数据库。托管驱动器将忽略之前安装的11g 32位。
需要注意的一点是,托管驱动器不能与Oracle用户定义类型一起工作。
<configuration>
<system.data>
<DbProviderFactories>
<remove invariant="Oracle.ManagedDataAccess.Client"/>
<add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver"
type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
</DbProviderFactories>
</system.data>
<oracle.manageddataaccess.client>
<version number="*">
<dataSources>
<dataSource alias="DEV11"
descriptor=" (DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = DEV11SVR)(PORT = 1525)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = dev11)))"/>
</dataSources>
</version>
</oracle.manageddataaccess.client>
</configuration>
SQLNET中的内容。ORA文件,它可能是从oracle 11安装中找到TNSNames文件,但是oracle 11配置为在检查TNSNames之前检查LDAP或EZConnect。
您可以覆盖此设置,而无需手动输入TNSNames中的内容,这是使用TNSNames文件的好处,例如,如果您的组织更改服务器并且数据库组管理TNSNames文件。
<oracle.manageddataaccess.client>
<version number="*">
<settings>
<setting name="NAMES.DIRECTORY_PATH" value="TNSNAMES"></setting>
</settings>
</version>
</oracle.manageddataaccess.client>