5

我们使用的是 Oracle.DataAccess.dll 程序集版本 2.102.2.20(32 位)。

我将我们的 Web API 应用程序部署到 IIS 并尝试打开和关闭连接:

 private static void CheckConnectionUsingOracleClient(string connection)
        {
            var logger = DiContainer.Resolve<ILogger>();

            try
            {
                logger.LogInfo("Trying to connect to " + connection);
                // check whether you can connect to the shop using Oracle.DataAccess
                using (var cnn = new Oracle.DataAccess.Client.OracleConnection(connection))
                {
                    cnn.Open();
                    cnn.Close();
                }

                logger.LogInfo("Succeeded to connect to " + connection);
            }
            catch (System.Exception ex)
            {
                logger.LogError("Failed to connect to " + connection, ex);
            }
        }

在我的本地机器上它很好,但是在这个服务器上它在尝试初始化 OracleConnection 时抛出一个异常:

'Oracle.DataAccess.Client.OracleConnection' 的类型初始化程序引发了异常。---> Oracle.DataAccess.Client.OracleException: 提供程序与 Oracle 客户端版本不兼容

我已经在服务器上安装了 Oracle 客户端 11.2(32 位),我可以看到在 GAC(c:\windows\assembly)中,Oracle.DataAccess 程序集安装在 32 位处理器架构中。它在我们的一台服务器上运行良好,但在这台服务器上运行良好。

在 IIS 中,我也在应用程序池上设置了“启用 32 位应用程序”。

如何修复?到目前为止,我已经花了 10 多个小时尝试不同的事情:(

理想情况下,我希望能够使用 Oracle.DataAccess.dll 而无需在服务器上安装 Oracle 客户端。

4

3 回答 3

5

您可以使用包管理器控制台 nuget 安装Oracle.ManagedDataAccess

Pm> Install-Package Oracle.ManagedDataAccess

ODP.NET, Managed Driver 是一个 100% 本机 .NET 代码驱动程序。无需安装额外的 Oracle 客户端软件即可连接到 Oracle 数据库。

更新代码

using Oracle.ManagedDataAccess.Client;
private static void CheckConnectionUsingOracleClient(string connection)
        {
            var logger = DiContainer.Resolve<ILogger>();

            try
            {
                logger.LogInfo("Trying to connect to " + connection);
                // check whether you can connect to the shop using Oracle.DataAccess
                using (var cnn = new OracleConnection(connection))
                {
                    cnn.Open();
                    cnn.Close();
                }

                logger.LogInfo("Succeeded to connect to " + connection);
            }
            catch (System.Exception ex)
            {
                logger.LogError("Failed to connect to " + connection, ex);
            }
        }
于 2016-10-09T04:59:13.620 回答
4

Oracle.DataProvider 版本2.102.2.20解密

2:.Net 版本(对于 .Net 1 - 1.1 可以是 1,对于 2 - 3.5 可以是 2,对于 4 - 4.5 可以是 4)

102:甲骨文版本:甲骨文10.2

2.20:Oracle数据访问版本

你应该检查

  1. .Net 版本(不应高于您的 .Net 编译器)

  2. Oracle 客户端版本(不应超过 Oracle 客户端版本)

  3. Oracle 客户端和 Oracle.DataProvider 均为 64 位或 Oracle.DataProvider 为 32 位,Oracle 客户端为 32 位或支持旧版 32 位模式

于 2013-07-02T12:29:11.397 回答
1

安装后确保:

  • PATH 使用 Oracle dll 位置更新:\product\12.1.0\client_1\bin 和 \product\12.1.0\client_1
  • 重新启动服务器。
  • 在 IIS 中为应用程序池启用 32 位。
于 2014-07-19T17:43:58.763 回答