我需要在64位机器上运行一个使用非托管ODP.NET的遗留应用程序。
以下是步骤:
1.我已经安装了64位的非托管ODP.NET。
2.我已经验证64位非托管ODP.NET可以正常工作,因为我在控制台应用程序中进行了测试。
3.我创建了一个测试Web应用程序,其中包含与工作中的控制台应用程序相同的数据访问代码,并引用了控制台应用程序使用的GAC中的相同Oracle.Data.Access DLL。但是,该Web应用程序无法连接到数据库。代码片段不相关,因为代码可行且非常简单(参见第2点)。
在conn.Open()处失败。
Exception.Message为空。
Exception.StackTrace没有用:
应用程序正在运行在本地的IIS上,而不是IIS Express。
在IIS中,“启用32位应用程序”设置为false。
该应用程序针对x64位平台,而不是Any CPU。
本地环境下,我使用64位Windows 10,在服务器上,我使用64位Windows Server 2012。我无法使非托管的ODP.NET在两者上正常工作。因此,据我所知,这与32位二进制文件无关,因为ODP.NET和两个操作系统都是64位的。
编辑:应用程序池(临时进行测试)使用与控制台应用程序相同的帐户运行,该帐户是机器上的管理员。
我错过了什么?如何在64位操作系统上使非托管的ODP.NET(64位)在ASP.NET上工作?
注意:这个问题看起来有点类似于其他问题,但据我所知并不是这样。
注意2:是的,我知道推荐的方法是使用托管的ODP.NET,但我没有源代码,因此无法进行更改。
以下是步骤:
1.我已经安装了64位的非托管ODP.NET。
2.我已经验证64位非托管ODP.NET可以正常工作,因为我在控制台应用程序中进行了测试。
3.我创建了一个测试Web应用程序,其中包含与工作中的控制台应用程序相同的数据访问代码,并引用了控制台应用程序使用的GAC中的相同Oracle.Data.Access DLL。但是,该Web应用程序无法连接到数据库。代码片段不相关,因为代码可行且非常简单(参见第2点)。
在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
应用程序正在运行在本地的IIS上,而不是IIS Express。
在IIS中,“启用32位应用程序”设置为false。
该应用程序针对x64位平台,而不是Any CPU。
本地环境下,我使用64位Windows 10,在服务器上,我使用64位Windows Server 2012。我无法使非托管的ODP.NET在两者上正常工作。因此,据我所知,这与32位二进制文件无关,因为ODP.NET和两个操作系统都是64位的。
编辑:应用程序池(临时进行测试)使用与控制台应用程序相同的帐户运行,该帐户是机器上的管理员。
我错过了什么?如何在64位操作系统上使非托管的ODP.NET(64位)在ASP.NET上工作?
注意:这个问题看起来有点类似于其他问题,但据我所知并不是这样。
注意2:是的,我知道推荐的方法是使用托管的ODP.NET,但我没有源代码,因此无法进行更改。