Как разместить приложение ASP.NET, использующее Oracle 11g, на машине, на которой установлен только Oracle 12c?

Мое приложение ASP.NET работает на сервере Windows Server 2008 R2. Оракл 11g установлен.

Я развернул это приложение на сервере Windows Server 2016. На этом сервере установлен Oracle 12c (11g не поддерживается).

Когда я запускаю приложение, я получаю эту ошибку:

Не удалось загрузить файл или сборку Oracle.DataAccess

Если я скопирую dll Oracle 11g (Oracle.DataAccess.dll) в папку bin приложения, я увижу это сообщение:

Предложение несовместимо с версией клиента Oracle.

Есть ли способ запустить это приложение без установки Oracle 11g или изменения кода приложения?

введите здесь описание изображения


person Ned    schedule 14.06.2018    source источник
comment
Это был бы лучший способ начать использовать управляемый драйвер вместо ODAC, но, к сожалению, в этом случае это не вариант @mason   -  person Ned    schedule 19.06.2018
comment
Причина в том, что мы должны сделать это примерно для 20 приложений, а изменение и перекомпиляция кода не входит в объем проекта.   -  person Ned    schedule 20.06.2018
comment
Они используют разные пространства имен, верно? Мы импортируем и используем Oracle.DataAccess.Client во всем коде. Как начать использовать Oracle.ManagedDataAccess без изменения кода?   -  person Ned    schedule 21.06.2018
comment
почему бы вам не включить DLL оракула в проект и не использовать его локально. добавьте эти DLL в свой проект как Добавить новый элемент. нажмите на свойства и установите локальную копию = true. убедитесь, что у вас установлена ​​версия драйверов Xcopy   -  person Sujit.Warrier    schedule 22.06.2018
comment
Хорошее предложение @Sujit.Warrier, но мы пытаемся избежать внесения каких-либо изменений в проект, как я уже упоминал. У нас есть 20 приложений, и даже простое изменение потребует их перекомпиляции, что подразумевает участие бизнес-пользователей, всестороннее тестирование и процедуры управления изменениями. Вы можете знать процесс в корпоративных компаниях   -  person Ned    schedule 22.06.2018
comment
тогда почему бы вам просто не скопировать dll в папку bin после развертывания. Сборка не требуется.   -  person Sujit.Warrier    schedule 25.06.2018
comment
Я старался. Как я уже упоминал в сообщении, это дает эту ошибку: Предоставление несовместимо с версией клиента Oracle.   -  person Ned    schedule 25.06.2018
comment
вы копируете 12c правильно? почему бы вам не скопировать 11g dll   -  person Sujit.Warrier    schedule 26.06.2018
comment
Извините за опечатку. Я исправил пост. Я попытался скопировать 11g dll   -  person Ned    schedule 27.06.2018


Ответы (2)


Если я правильно понимаю, что ваше приложение связано с 11gR2 dll Oracle.DataAccess.dll.

Можете ли вы проверить версию dll, которая находится на вашем пути (возможно, в GAC, но не всегда)?

Что у вас есть в этом разделе Web.config (образец взят с моего веб-сайта)? Соответствует ли это dll на вашем пути? :

<runtime>
    <!-- This prevents the Windows Event Log from frequently logging that HMAC1 is being used (when the other party needs it). -->
    <legacyHMACWarning enabled="0" />
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <!-- Oracle -->
        <dependentAssembly>
            <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-4.65535.65535.65535" newVersion="4.122.1.0" />
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="Oracle.ManagedDataAccess" publicKeyToken="89b483f429c47342" culture="neutral" />
            <bindingRedirect oldVersion="4.0.0.0 - 4.65535.65535.65535" newVersion="4.122.1.0" />
        </dependentAssembly>

Выше я переназначаю все версии драйвера на драйвер, установленный на моем сервере. Обычно это работает нормально, если только вы активно не используете что-то, что присутствует только в «верхней» версии.

Обязательно проверьте версию вашей dll (вышеупомянутая версия предназначена для драйвера 12.2).

person Michel de Becdelièvre    schedule 26.06.2018

Вы имеете в виду, "без установки Oracle 11g, не так ли? 12c установлен прямо сейчас. По крайней мере, я так понял - приложение работает нормально на [Server 2008 + 11g], и теперь вы хотите его запустить на [Server 2016 + 12c].

Если окажется, что я прав и вам придется установить 11g на Server 2016, тогда вы можете установить программное обеспечение Oracle Client, но, если вы спросите меня, я бы предпочел установить базу данных Oracle 11g Express Edition (XE). . Вот почему:

  • installation is easy (a few NEXT clicks)
    • just make sure to install it into its own Oracle Home (i.e. directory, one that is different from the one that contains 12c)
  • это не займет много места
  • установите его (в разделе "Службы") для запуска вручную (т.е. никогда), так как вам не нужно использовать его в качестве базы данных, а только его DLL или что-то еще, что нужно вашему приложению, поэтому оно не потребует никаких ресурсов (кроме места на жестком диске)
  • он содержит все, что вам может понадобиться (включая утилиты, такие как экспорт/импорт и SQL*Loader, поддержку сети)
  • всякий раз, когда мне что-то нужно, я был намного счастливее с установкой XE, чем с установкой клиента (но ладно, это, вероятно, я, не умеющий правильно использовать клиент)

Если выяснится, что я не прав, ну ладно, подождем чьего-то другого и куда лучшего мнения.

person Littlefoot    schedule 15.06.2018
comment
Ты прав. Я имел в виду без установки Oracle 11g (я отредактировал свой вопрос). Однако вы предлагаете установить 11g. Мне не разрешено его устанавливать (политика компании - 11g не поддерживается в 2016 году, поэтому его нельзя установить) - person Ned; 19.06.2018
comment
Я понимаю. Хотя, читая форумы, я видел, что люди все еще используют 8.1.7 и Forms 6i, поэтому я предполагаю, что 11gXE будет жить долго и процветать в вашей системе, фактически не делая ничего, но предоставляя недостающие части. . Я надеюсь, что решение вашей проблемы ЕСТЬ и что вам удастся его найти. Удачи! - person Littlefoot; 19.06.2018