Установка ODP.net на сервере для разрешения Oracle.Доступа к данным.Клиент.OracleException: поставщик несовместим с версией клиента Oracle
У меня есть тестовая среда для службы, которую будет использовать мой сайт, и рабочая среда. В моей тестовой среде у меня есть ODP.net установлен на сервере. Эта служба, которая использует Oracle, кажется, работает довольно гладко до сих пор. Кажется, у меня вообще нет клиента Oracle, работающего на этом сервере. С другой стороны, у меня есть сервер, на котором есть клиент Oracle, но, похоже, нет ODP.net установленный на нем (я нахожусь в процессе двойной проверки, но это ситуация на момент этого вопроса S-O). На производственном сервере я получаю это исключение:
Oracle.DataAccess.Client.OracleException: The provider is not compatible with the version of Oracle client
на обоих серверах у меня есть Oracle.Dataaccess dll в папках bin и lib (не думаю, что мне это нужно в папке lib, но зачем раскачивать лодку... Я уверен, что вы можете придумать хорошую причину, но не сейчас!!!). Мой вопрос: мне нужно установить ODP.net на производственный сервер? Это решило какие-либо проблемы, с которыми вы столкнулись? Я видел некоторые сообщения, которые говорят это решен аналогичный вопрос для них. Не могли бы вы порекомендовать план действий? Спасибо!
5 ответов
существует много небольших суб-версий клиента oracle, и, скорее всего, произошло то, что клиенты oracle, установленные на машине, дающей ошибку, не совсем та же версия, что из.
лучшее, что нужно сделать, это убедиться, что вы используете ровно тот же пакет установки на каждой машине и сервере dev. Это позволит избежать несоответствия.
в качестве альтернативы, что я сделал в прошлом, чтобы решить эту проблему (а она не может быть "лучшей" вещью, но обычно это работает для меня) - это и скопировать файл OraOps11.dll
на вместе с .
получить файл из того же oracle install на том же компьютере, где вы получили Oracle.DataAccess.dll
. Он должен быть в папке с именем что-то вроде этого, в зависимости от того, где вы установили Oracle, и какая версия:
C:\oracle\product\11.1.0\client_1\bin\OraOps11.dll файлы
это сработало для меня, как только я запустил их:
OraProvCfg /action:config /product:odp /frameworkversion:v2.0.50727 /providerpath:C:\app\Administrator\product.2.0\client_1\ODP.NET\bin.x\Oracle.DataAccess.dll
OraProvCfg /action:config /product:odp /frameworkversion:v4.0.30319 /providerpath:C:\app\Administrator\product.2.0\client_1\ODP.NET\bin\Oracle.DataAccess.dll
удачи
Я столкнулся с точно такой же проблемой, я попытался скопировать как можно больше DLL, но без успеха.
в конце мне пришлось установить "ODTwithODAC121012" (32bit) на сервере (Win 2008 R2 64bit).
после установки убедитесь, что:
- путь обновляется с расположением Oracle DLL: \product\12.1.0\client_1\bin и \product\12.1.0\client_1
- перезапустить сервер.
- включить 32bit для пула приложений в IIS.
Я запускаю с той же проблемой на сервере Windows 2012, на котором я установил Oracle 10.2.0.3 (версия oracle 10.2, совместимая с 64 битами) и развернул веб-сайт, который использовал клиент 10.2.0.1 Oracle.
Я пробовал все решения в этом посте, но тот, который работал с моей формой, был последним пунктом ответа Абдаллы:
"включить 32bit для пула приложений в IIS"
конечно, мне также пришлось развернуть свой webapp с правильным Оракул.Данные.Ссылку открыть (10.2.0.3)
наконец, сообщение об ошибке сбило меня с толку, потому что оно заставило меня ослепнуть, чтобы решить проблему с версией, но на самом деле проблема заключалась в том, что IIS не был способен excute 32 bits App.
надеюсь, это поможет
спасибо... это помогло мне сэкономить время на преобразовании frm 32 бит в 64 бит нашего ASP.Net применение...
Подробно: Сервер приложений ищет клиентские библиотеки, даже мы используем компонент удаленного взаимодействия для подключения к ORACLE db... с клиентом ORACLE 64 бит..
Execption, который я получил, был разрешен после копирования этих 5 dll в мое приложение/bin папка
- oci.dll файлы
- oraociicu11.dll файлы
- oraops11w.dll
- orannzsbb11.dll файлы
- ociw32.dll файлы
Сообщение Об Ошибке : Инициализатор типа для ' Oracle.Доступа к данным.Типы.OracleString' выбросил исключение.
Сведения Об Ошибке : Система.TypeInitializationException: инициализатор типа для ' Oracle.Доступа к данным.Типы.OracleString' выбросил исключение. ---> Оракул.Доступа к данным.Клиент.OracleException поставщик несовместим с версией клиента Oracle в Oracle.Доступа к данным.Клиент.Ораклейнит.Инициализировать() --- Конец внутренней трассировки стека исключений - - -
трассировка стека сервера: в системе.Во время выполнения.Сериализация.FormatterServices.nativeGetUninitializedObject (тип RuntimeType) в системе.Во время выполнения.Сериализация.Форматеры.Двоичный.ObjectReader.ParseObject (ParseRecord pr) на Система.Во время выполнения.Сериализация.Форматеры.Двоичный.ObjectReader.ParseMember (parserecord pr) в системе.Во время выполнения.Сериализация.Форматеры.Двоичный._BinaryParser.ReadObjectWithMapTyped (запись BinaryObjectWithMapTyped) в системе.Во время выполнения.Сериализация.Форматеры.Двоичный._BinaryParser.Бежать() в системе.Во время выполнения.Сериализация.Форматеры.Двоичный.ObjectReader.Десериализовать (обработчик HeaderHandler, _ _ BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) в системе.Во время выполнения.Сериализация.Форматеры.Двоичный.Класс binaryformatter.Десериализовать (Stream serializationStream, обработчик HeaderHandler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) в системе.Во время выполнения.Сериализация.Форматеры.Двоичный.Класс binaryformatter.Десериализовать (Stream serializationStream, обработчик HeaderHandler, логический fCheck, imethodcallmessage methodCallMessage) на Система.Во время выполнения.Удаленное взаимодействие.Каналы.BinaryClientFormatterSink.SyncProcessMessage (iMessage msg)
исключение перестроено на [0]: в системе.Во время выполнения.Удаленное взаимодействие.Полномочия.Объекта realproxy.HandleReturnMessage (IMessage reqMsg, IMessage retMsg) в системе.Во время выполнения.Удаленное взаимодействие.Полномочия.Объекта realproxy.PrivateInvoke (MessageData& msgData, тип Int32)