Установка ODP.net на сервере для разрешения Oracle.DataAccess.Client.OracleException: поставщик не совместим с версией клиента Oracle - PullRequest
7 голосов
/ 29 ноября 2011

У меня есть тестовая среда для службы, которую будет использовать мой сайт, и производственная среда.В моей тестовой среде у меня установлен ODP.net на сервере.Этот сервис, который использует Oracle, кажется, до сих пор работает довольно гладко.Похоже, у меня вообще не работает Oracle Client на этом сервере.С другой стороны, у меня есть сервер, на котором установлен клиент Oracle, но на нем, по-видимому, не установлен ODP.net (я нахожусь в процессе двойной проверки, но такова ситуация с этим вопросом SO),На рабочем сервере я получаю это исключение:

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

на обоих серверах у меня есть dll Oracle.DataAccess в папках bin и lib (не думайте, что он мне нужен в папке lib, но зачем качатьлодка ... я уверен, что вы можете придумать вескую причину, но не сейчас !!!).У меня вопрос: нужно ли мне устанавливать ODP.net на рабочий сервер?Это решило любые проблемы, с которыми вы столкнулись?Я видел некоторые SO сообщения, которые говорят, что это решило подобную проблему для них.Не могли бы вы порекомендовать курс действий?Спасибо!

Ответы [ 5 ]

12 голосов
/ 29 ноября 2011

Существует множество небольших подверсий клиента oracle, и, скорее всего, произошло то, что установленные на компьютере клиенты oracle, сообщающие об ошибке, не совсем та же версия, из которой пришел файл Oracle.DataAccess.dll.

Лучше всего убедиться, что вы используете точно один и тот же установочный пакет на каждом компьютере и сервере разработчика. Это позволит избежать любого несоответствия.

В качестве альтернативы, что я сделал в прошлом, чтобы решить эту проблему (и это может быть не самым лучшим, но обычно это работает для меня), чтобы также скопировать файл OraOps11.dll в каталог \bin вместе с файлом Oracle.DataAccess.dll.

Получить файл из той же установки Oracle на той же машине, где вы получили Oracle.DataAccess.dll. Он должен находиться в папке с таким именем, в зависимости от того, где вы установили Oracle, и какой версии:

C: \ оракул \ продукт \ 11.1.0 \ client_1 \ Bin \ OraOps11.dll

5 голосов
/ 31 октября 2012

Это сработало для меня, как только я запустил их:

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

Удачи

2 голосов
/ 19 июля 2014

Я столкнулся с точно такой же проблемой, я пытался скопировать как можно больше dll, но безуспешно.

В конце мне пришлось установить «ODTwithODAC121012» (32-битную) на сервер (Win 2008R2 64bit).

После установки убедитесь, что:

  • PATH обновлен с расположением Oracle dll: \ product \ 12.1.0 \ client_1 \ bin и \ product \ 12.1.0 \client_1
  • Перезагрузите сервер.
  • Включите 32-разрядную версию для пула приложений в IIS.
1 голос
/ 16 марта 2015

Я работаю с той же проблемой на сервере Windows 2012, на котором установлен Oracle 10.2.0.3 (версия oracle 10.2, совместимая с 64-разрядной версией), и развернул веб-сайт, использующий клиент Oracle 10.2.0.1.

Я попробовал все решения в этом посте, но тот, который работал с моим, был последним пунктом ответа Абдаллы:

"Включить 32-разрядную версию для пула приложений в IIS"

Конечно, мне также пришлось развернуть свое веб-приложение с правильной ссылкой Oracle.Data.Access (10.2.0.3)

Наконец, сообщение об ошибке сбило меня с толку, потому что я был ослеплен, чтобы решить проблему с версией, но на самом деле проблема заключалась в том, что IIS не был способен выполнять 32-битное приложение.

Надеюсь, это поможет

0 голосов
/ 19 июля 2012

Спасибо ... это помогло мне сэкономить время на преобразование 32-разрядных файлов в наше ASP.Net-приложение ...

В деталях: Сервер 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 в Oracle.DataAccess.Client.OracleInit.Initialize (). --- Конец внутренней трассировки стека исключений ---

Трассировка стека серверов: в 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 record) в System.Runtime.Serialization.Formatters.Binary. _BinaryParser.Run () в System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize (обработчик HeaderHandler, __BinaryParser serParser, логический fCheck, логический isCrossAppDomain, IMethodCallMessage methodCallMessage IMethodCallMessage) в System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (поток serializationStream, обработчик HeaderHandler, логический fCheck, логический isCrossAppDomain, IMethodCallMessage methodCallMessage) в System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (поток serializationStream, обработчик HeaderHandler, логический fCheck, метод IMethodCallMessageCallMessage) в System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMessage (IMessage msg)

Исключение переброшено в [0]: в System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage (IMessage reqMsg, IMessage retMsg) в System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke (MessageData & msgData, тип Int32)

...