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 クライアントには多くの小さなサブバージョンがあり、エラーが発生したマシンにインストールされている Oracle クライアントが、Oracle.DataAccess.dllファイルの元のバージョンと正確に同じではない可能性があります。

最善の方法は、すべての開発マシンとサーバーでまったく同じインストール パッケージを使用することです。これにより、ミスマッチが回避されます。

別の方法として、これを解決するために過去に行ったこと (「最善の」方法ではないかもしれませんが、通常はうまくいきます) は、ファイルと一緒にファイルをディレクトリにコピーすることです。 .OraOps11.dll\binOracle.DataAccess.dll

を取得したのと同じマシン上の同じ oracle インストールからファイルを取得します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をコピーしようとしましたが、運がありませんでした。

最後に、「ODTwithODAC121012」(32bit) をサーバー (Win 2008 R2 64bit) にインストールする必要がありました。

インストール後、次のことを確認してください。

  • 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 クライアントを使用する Web サイトを展開した Windows 2012 Server で同じ問題が発生しました。

この投稿ですべての解決策を試しましたが、私のフォームで機能したのは、アブダラの回答の最後のポイントでした:

「IIS でアプリケーション プールの 32 ビットを有効にする」

もちろん、正しい Oracle.Data.Access 参照 (10.2.0.3) を使用して webapp をデプロイする必要もありました。

最後に、バージョンの問題を解決するために目がくらむようになったので、エラー メッセージは私を混乱させましたが、実際の問題は IIS が 32 ビット アプリケーションを実行できないことでした。

それが役に立てば幸い

于 2015-03-16T10:26:43.587 に答える
0

ありがとう...これにより、ASP.Netアプリケーションの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 タイプ) で 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.System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler、__BinaryParser serParser、Boolean fCheck、Boolean isCrossAppDomain、IMethodCallMessage methodCallMessage) での _BinaryParser.Run() System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize( System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize のストリーム serializationStream、HeaderHandler ハンドラー、Boolean fCheck、Boolean isCrossAppDomain、IMethodCallMessage methodCallMessage) (System.Runtime.Remoting.Channels の Stream serializationStream、HeaderHandler ハンドラー、Boolean fCheck、IMethodCallMessage methodCallMessage) .BinaryClientFormatterSink.SyncProcessMessage(IMessage メッセージ)

[0] で再スローされた例外: System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) で System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 タイプ)

于 2012-07-18T22:20:02.343 に答える