7

我有一个用于我的站点将使用的服务的测试环境和一个生产环境。在我的测试环境中,我在服务器上安装了 ODP.net。到目前为止,使用 Oracle 的服务似乎运行得非常顺利。我似乎根本没有在该服务器上运行 Oracle 客户端。另一方面,我有一个服务器,上面有一个 Oracle 客户端,但似乎没有安装 ODP.net(我正在仔细检查,但这就是这个 SO 问题的情况) . 在生产服务器上,我得到了这个异常:

Oracle.DataAccess.Client.OracleException: The provider is not compatible with the version of Oracle client

在两台服务器中,我在 bin 和 lib 文件夹中都有 Oracle.DataAccess dll(认为我在 lib 文件夹中不需要它,但是为什么要摇摆不定...我相信您可以想出一个很好的理由,但是不是现在!!!)。我的问题是我需要在生产服务器上安装 ODP.net 吗?这是否解决了您遇到的任何问题?我看过一些 SO 帖子说这为他们解决了类似的问题。你能推荐一个行动方案吗?谢谢!

4

5 回答 5

12

Oracle.DataAccess.dlloracle客户端有很多小子版本,可能发生的情况是机器上安装的oracle客户端给出错误与文件来源的版本不完全相同。

最好的办法是确保在每台开发机器和服务器上使用完全相同的安装包。这将避免任何不匹配。

作为替代方案,我过去为解决此问题所做的(它可能不是“最好的”事情,但它通常对我有用)是将文件与文件一起复制OraOps11.dll到您的\bin目录Oracle.DataAccess.dll.

从您获得Oracle.DataAccess.dll. 它应该位于一个类似这样的文件夹中,具体取决于您安装 Oracle 的位置和版本:

C:\oracle\product\11.1.0\client_1\bin\OraOps11.dll

于 2011-11-29T16:32:18.853 回答
5

一旦我运行它们,这对我有用:

OraProvCfg /action:config /product:odp /frameworkversion:v2.0.50727 /providerpath:C:\app\Administrator\product\11.2.0\client_1\ODP.NET\bin\2.x\Oracle.DataAccess.dll

OraProvCfg /action:config /product:odp /frameworkversion:v4.0.30319 /providerpath:C:\app\Administrator\product\11.2.0\client_1\ODP.NET\bin\4\Oracle.DataAccess.dll

祝你好运

于 2012-10-31T14:14:20.223 回答
2

我遇到了完全相同的问题,我试图复制尽可能多的 dll,但没有任何运气。

最后我不得不在服务器(Win 2008 R2 64bit)中安装“ODTwithODAC121012”(32bit)。

安装后确保:

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

我在安装了 Oracle 10.2.0.3(与 64 位兼容的 oracle 10.2 版本)并部署了一个使用 10.2.0.1 Oracle 客户端的网站的 Windows 2012 服务器中运行相同的问题。

我尝试了这篇文章中的所有解决方案,但对我有效的解决方案是 Abdallah 回答的最后一点:

“在 IIS 中为应用程序池启用 32 位”

当然,我还必须使用正确的 Oracle.Data.Access 参考 (10.2.0.3) 部署我的 webapp

最后,错误消息让我感到困惑,因为它让我无法解决版本问题,但真正的问题是 IIS 无法执行 32 位 App。

希望能帮助到你

于 2015-03-16T10:26:43.587 回答
0

谢谢...这帮助我节省了将 ASP.Net 应用程序的 frm 32 位转换为 64 位的时间...

详细说明:APP 服务器寻找客户端库,即使我们使用远程组件连接到 ORACLE db... 使用 ORACLE 客户端 64 位..

将这 5 个 dll 复制到我的 app/bin 文件夹后,我得到的执行得到解决

  1. oci.dll
  2. oraociicu11.dll
  3. oraops11w.dll
  4. orannzsbb11.dll
  5. ociw32.dll

错误消息:“Oracle.DataAccess.Types.OracleString”的类型初始化程序引发了异常。

错误详细信息:System.TypeInitializationException:“Oracle.DataAccess.Types.OracleString”的类型初始化程序引发异常。---> Oracle.DataAccess.Client.OracleException 提供程序与 Oracle.DataAccess.Client.OracleInit.Initialize() 处的 Oracle 客户端版本不兼容 --- 内部异常堆栈跟踪结束 ---

服务器堆栈跟踪:在 System.Runtime.Serialization.FormatterServices.nativeGetUninitializedObject(RuntimeType type) 在 System.Runtime.Serialization.Formatters.Binary.ObjectReader.ParseObject(ParseRecord pr) 在 System.Runtime.Serialization.Formatters.Binary.ObjectReader.ParseMember (ParseRecord pr) 在 System.Runtime.Serialization.Formatters.Binary._ BinaryParser.ReadObjectWithMapTyped(BinaryObjectWithMapTyped 记录) 在 System.Runtime.Serialization.Formatters.Binary。_BinaryParser.Run() 在 System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) 在 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize( System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, IMethodCallMessage methodCallMessage) at System.Runtime.Remoting.Channels .BinaryClientFormatterSink.SyncProcessMessage(IMessage 消息)

在 [0] 处重新引发异常:在 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 类型) 处的 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)

于 2012-07-18T22:20:02.343 回答