Наличие двух ODP.NET (ODAC) версии в том же сервере

Несколько месяцев назад мой коллега установил ODAC 11.106.21 в сервере с помощью XCOPY, и затем он разработал много приложений, которые используют этот клиент без проблем (в тесте и производственных серверах окон).

Прошлая неделя, я разработал приложение под ODAC 11.1.07.20. Когда я попросил, чтобы он установил их новая версия ODAC с помощью XCOPY в другой папке и затем включал мое приложение в тестовый сервер, он ответил мне, что я должен использовать ODAC 11.106.21, потому что он мог испытать затруднения из-за своих приложений.

Таким образом, я хотел бы знать:

1) Если действительно возможно иметь две различных версии ODAC в одном сервере.

2) Если ответ положителен, как я могу твердо удостовериться своему коллеге, что он не испытает затруднения из-за своих приложений?

3) Если ответ положителен, действительно ли это необходимо для реализации некоторой конфигурации в сервере?

Спасибо!!

5
задан vizcayno 23 March 2010 в 22:05
поделиться

2 ответа

У вас может быть несколько версий ODAC на одном компьютере, но есть несколько вещей, о которых нужно знать в отношении того, какая версия будет использоваться каждым приложением. Фактически это касается всех сборок.

  • в Visual Studio, если вы установите Specific Version = True для Oracle.DataAccess.dll, то это приложение не будет использовать никакую другую версию и должно быть в состоянии найти версию, для которой оно было построено.
  • независимо от того, развертываете ли вы DLL вместе с приложением или ожидаете, что она будет в определенном месте или в GAC.
  • существует особый порядок поиска для поиска зависимых библиотек DLL, и он весьма сложен, поэтому прочтите этот раздел MSDN .

Короткий ответ заключается в том, что есть два простых способа убедиться, что ваше приложение использует именно ту версию Oracle.DataAccess.dll, которая вам нужна (это применимо в большинстве случаев, когда все остальное установлено по умолчанию):

  1. Установить конкретную Версия True;
  2. Разверните DLL с вашим приложением и поместите ее в каталог приложения, ИЛИ убедитесь, что DLL находится в GAC.

В вашем конкретном случае у вашего коллеги может быть обоснованное беспокойство: если его приложения, которые в настоящее время установлены, получают Oracle.DataAccess.dll из GAC, и он не установил для конкретной версии значение True, то при установке новый ODAC, его приложения начнут использовать его (я предполагаю, что новый Oracle.DataAccess.dll будет установлен и в GAC),

9
ответ дан 18 December 2019 в 14:44
поделиться

Проблема здесь не в DLL .NET, а в неуправляемых DLL.

Я пытался заставить работать два приложения ASP.NET на одном сервере. Один из них старше с использованием ODP.NET 9.x, а новый с использованием последней версии ODP.NET. Я развернул новейший ODP.NET с помощью xcopy и добавил пути к переменной среды PATH для нового ODP. Теперь старое приложение не работает (вероятно, пытается использовать новые dll). Когда я удаляю пути из переменной PATH, новое приложение не работает. Я нашел способ заставить его работать на одном сервере под IIS на страницах Oracle, но это не сработало. Может быть, потому что я не установил новейшую версию ODP.NET, а просто скопировал ее. Придется попробовать.

О чем говорит Oracle: Ссылка: http://www.oracle.com/technology/tech/windows/odpnet/faq.html Многие приложения Oracle работать в Microsoft Internet Information Services (IIS). Раньше IIS представлял собой приложение с одним процессом без возможности назначать разные пути к системе для каждого запущенного веб-приложения, использующего один и тот же экземпляр IIS. В IIS 6 в Windows Server 2003 IIS поддерживает несколько процессов для одного и того же экземпляра. Поскольку каждое приложение имеет свой собственный процесс IIS, каждому веб-приложению может быть назначен отдельный каталог System Path с его собственным Oracle Home.

Документация Microsoft предоставляет информацию об изоляции рабочих процессов IIS и пулах приложений.

Чтобы настроить несколько активных Oracle Homes, работающих одновременно на одном сервере IIS: 1) Запустите IIS 6 в режиме изоляции рабочего процесса в Windows Server 2003 2) Разверните одну версию Oracle Клиент для одного пула приложений, а вторая версия - для другого пула приложений.Например, вы можете использовать Oracle Client 9.2.0.2 и ODP.NET 9.2.0.2 в одном пуле приложений. Oracle Client 9.2.0.4 и ODP.NET 9.2.0.4 могут использоваться другим пулом приложений. Вы не сможете использовать два активных Oracle Homes в одном пуле приложений. Каждый активный Oracle Home должен находиться в другом пуле. 3) Задайте каталог DLL для каждого рабочего процесса, чтобы он использовал соответствующий каталог клиента Oracle Home. Для этого в каждом приложении ASP.NET вызовите SetDllDirectory (имя_каталога) на ранней стадии жизненного цикла приложения перед вызовом любых библиотек DLL Oracle. Входная переменная SetDllDirectory - это домашний bin-каталог Oracle используемой версии ODP.NET. Примечание. SetDllDirectory - это неуправляемый вызов.

4
ответ дан 18 December 2019 в 14:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: