如何在asp.net核心Web应用程序中设置tnsnames.ora?

时间:2019-04-24 09:46:04

标签: oracle asp.net-core odp.net asp.net-core-2.2 odp.net-managed

我有一个小的asp.net core 2.2应用程序,应该访问一个oracle数据库;我正在使用NuGet Oracle.ManagedDataAccess.Core(2.18.6),它仅在我的计算机上工作。

当我使用IIS将其部署到Windows服务器时,我将一个tnsnames.ora文件放在应用程序的目录中,再次它可以正常工作。

现在,我要使用共享的tnsnames.ora文件。我已经尝试过像下面这样web.config(来自StackOverflow / Google对类似问题的回答的答案)。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
  </configSections>

  <!-- skipping app stuff -->

  <oracle.manageddataaccess.client>
    <version number="*">
      <settings>
        <setting name="tns_admin" value="F:\path\to\tnsadmin\folder" />
      </settings>
    </version>
  </oracle.manageddataaccess.client>
</configuration>

不幸的是,这是行不通的(并且由于Oracle.ManagedDataAccess.dll的Core版本没有ODPMSectionHandler类,所以这并不奇怪)。

那么,有没有办法与odp.net核心共享tnsnames.ora文件?

(PS imo,我们需要odp.net-core标签)

更新

  1. 需要确保w3wp.exe可以实际访问文件。

  2. 设置系统环境变量TNS_ADMIN是可行的解决方案。在这种情况下就足够了,但是我仍然很好奇如何通过web.config进行配置。

2 个答案:

答案 0 :(得分:0)

ODP.NET Core不像标准ODP.NET那样支持配置文件。您将需要使用配置API:

https://docs.oracle.com/en/database/oracle/oracle-data-access-components/18.3/odpnt/InstallCoreConfiguration.html

答案 1 :(得分:0)

使用Oracle.ManagedDataAccess,您不需要使用tnsnames.ora文件。实际上,您不需要在Web服务器上安装Oracle客户端。使用startup.cs。

public void ConfigureServices(IServiceCollection services)
{                        
        services.AddEntityFrameworkOracle()
            .AddDbContext<OracleDbContext>(builder => builder.UseOracle(Configuration["Data:OracleDbContext"]),ServiceLifetime.Scoped)
            .AddDbContext<AppsDbContext>(option => option.UseOracle(Configuration["Data:AppsDbConnection:ConnectionString"]), ServiceLifetime.Scoped);
}

apsettings.json

{
 "Logging": {
"LogLevel": {
  "Default": "Warning"
}
},
"AllowedHosts": "*",
"Data": {
"OracleDbContext": "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=zzz)(PORT=1521))(CONNECT_DATA=(zzzz)));User Id=zzz;Password=zzz;" },
"AppsDbContext": "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=yyyy)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=yyyy)));User Id=yyyy;Password=yyyy;" }
}
}