如何在64位O / S上使用ASP.NET中的非托管ODP.NET(64位)?

时间:2017-07-09 08:50:29

标签: c# asp.net .net iis odp.net

我必须得到一个使用unmanaged ODP.NET 64-bit计算机的遗留应用程序。

  1. 我已安装64-bit unmanaged ODP.NET
  2. 我已通过在控制台应用程序中对其进行测试验证64-bit unmanaged ODP.NET正常工作
  3. 我创建了一个测试Web应用程序,它具有与工作控制台应用程序相同的数据访问代码,以及对控制台应用程序使用的Oracle.Data.Access中相同GAC DLL的引用。 Web应用程序无法连接到数据库。代码片段不相关,因为代码有效并且非常简单(参见第2点。)。
  4. conn.Open();

    失败

    Exception.Message为空。

    Exception.StackTrace无效:

     at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, 
        OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object 
        src, String procedure, Boolean bCheck, Int32 isRecoverable) at 
        Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, 
        OracleConnection conn, IntPtr opsErrCtx, Object src) at 
        Oracle.DataAccess.Client.OracleConnection.Open() at 
        TestODPNet.ODPNetTester.Test() in 
        D:\Projects\TestODPNet\TestODPNet\ODPNetTester.cs:line 27
    

    该应用程序正在Local IIS上运行,而不是IIS Express

    IIS中,“Enable 32-bit applications”设置为false

    该应用程序的目标是x64-bit平台,而不是Any CPU

    在本地,我正在使用64-bit Windows 10,而在服务器上,我正在使用64-bit Windows Server 2012。我无法让任何非托管ODP.NET工作。所以,从32-bit开始,我认为这与ODP.NET二进制文件无关,而且两个操作系统都是64-bit

    编辑:应用程序池(暂时用于测试)使用与控制台应用程序相同的帐户运行,控制台应用程序是计算机上的管理员。

    我错过了什么?如何在unmanaged ODP.NET (64-bit) O / S上ASP.NET 64-bit工作?

    注意:这个问题看起来与其他问题有点相似,但它并不是我所知道的

    注意2:是的,我知道推荐的方法是使用managed ODP.NET,但我没有源代码,因此无法进行更改。

1 个答案:

答案 0 :(得分:0)

我尝试了一个简单的应用程序,它对我来说是预期的。我的设置Win 8.1,IIS

连接到Oracle

后进程加载的DLL的屏幕截图

enter image description here

    using (OracleConnection conn = new OracleConnection(connectionString))
    {
        conn.Open();

    }

基于ODP.Net文档

  

适用于.NET的Oracle数据提供程序,非托管驱动程序程序集

     

Oracle.DataAccess.Client命名空间包含客户端提供程序的ODP.NET类和枚举。

我添加了对Oracle.DataAccess.dll的引用。这是我项目中唯一的Oracle DLL引用。

在我的机器中,DLL位于以下位置

  

\产品\ 12.2.0 \的Client_1 \ odp.net \ BIN \ 4 \ Oracle.DataAccess.dll

我使用Oracle网站的this版本来安装ODP.Net

enter image description here

在安装过程中,我特意选择了

(1)不要改变machine.config

(2)不在GAC中安装任何东西

所以,要尝试的事情:

(1)从Oracle文件夹(而不是GAC)引用程序集

(2)安装最新的ODP.Net

祝你好运