Наличие двух версий ODP.NET (ODAC) на одном сервере - PullRequest
5 голосов
/ 24 марта 2010

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

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

Итак, я хотел бы знать:

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

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

3) Если ответ положительный, необходимо ли выполнять какую-либо настройку на сервере?

Спасибо !!

Ответы [ 2 ]

9 голосов
/ 24 марта 2010

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

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

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

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

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

4 голосов
/ 12 апреля 2010

Проблема здесь не в 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 (имя_каталога) в начале жизненного цикла приложения, прежде чем будут вызваны какие-либо библиотеки Oracle DLL. Входная переменная SetDllDirectory - это каталог домашней папки Oracle используемой версии ODP.NET. Примечание. SetDllDirectory - это неуправляемый вызов.

...