Несколько месяцев назад мой коллега установил ODAC 11.106.21 в сервере с помощью XCOPY, и затем он разработал много приложений, которые используют этот клиент без проблем (в тесте и производственных серверах окон).
Прошлая неделя, я разработал приложение под ODAC 11.1.07.20. Когда я попросил, чтобы он установил их новая версия ODAC с помощью XCOPY в другой папке и затем включал мое приложение в тестовый сервер, он ответил мне, что я должен использовать ODAC 11.106.21, потому что он мог испытать затруднения из-за своих приложений.
Таким образом, я хотел бы знать:
1) Если действительно возможно иметь две различных версии ODAC в одном сервере.
2) Если ответ положителен, как я могу твердо удостовериться своему коллеге, что он не испытает затруднения из-за своих приложений?
3) Если ответ положителен, действительно ли это необходимо для реализации некоторой конфигурации в сервере?
Спасибо!!
У вас может быть несколько версий ODAC на одном компьютере, но есть несколько вещей, о которых нужно знать в отношении того, какая версия будет использоваться каждым приложением. Фактически это касается всех сборок.
Короткий ответ заключается в том, что есть два простых способа убедиться, что ваше приложение использует именно ту версию Oracle.DataAccess.dll, которая вам нужна (это применимо в большинстве случаев, когда все остальное установлено по умолчанию):
В вашем конкретном случае у вашего коллеги может быть обоснованное беспокойство: если его приложения, которые в настоящее время установлены, получают Oracle.DataAccess.dll из GAC, и он не установил для конкретной версии значение True, то при установке новый ODAC, его приложения начнут использовать его (я предполагаю, что новый Oracle.DataAccess.dll будет установлен и в GAC),
Проблема здесь не в 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 - это неуправляемый вызов.