Запуск Oracle на 64-битной Windows 2008 R2 и WCF - PullRequest
4 голосов
/ 05 мая 2011

Я пытаюсь развернуть на 64-битном сервере Windows 2008 R2 под управлением AppFabric службу WCF 4.0, которая подключается к базе данных Oracle 10gR2.На моих Windows 7 64-битных, внутри Visual Studio 2010, все идет хорошо.Я впервые начал использовать Oracle ODP.NET и, при развертывании, я начал получать:

System.IO.FileNotFoundException: Could not load file or assembly 'Oracle.DataAccess, Version=2.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342' or one of its dependencies. The system cannot find the file specified.
File name: 'Oracle.DataAccess, Version=2.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342'

Я пробовал так много вещей, но ничего не получалось, и так как я отчаянно желал, чтобы это заработалои отправился в OracleClient, несмотря на то, что он помечен как устаревший, просто для того, чтобы это заработало и сэкономило мне время.Я удалил все, что установил, но установил только win64_11gR2_client.zip с опцией времени выполнения.Однако, чем я начал получать:

System.DllNotFoundException: Unable to load DLL 'oramts.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

Итак, я переустановил win64_11gR2_client.zip, добавив компонент Oracle Services for Microsoft Transaction Server.Но затем, всякий раз, когда я звонил своей службе WCF, IIS зависал с ошибкой ниже:

Faulting application name: w3wp.exe, version: 7.5.7601.17514, time stamp: 0x4ce7afa2
Faulting module name: ntdll.dll, version: 6.1.7601.17514, time stamp: 0x4ce7c8f9
Exception code: 0xc0000374
Fault offset: 0x00000000000c40f2
Faulting process id: 0xb28
Faulting application start time: 0x01cc0b141a857fac
Faulting application path: c:\windows\system32\inetsrv\w3wp.exe
Faulting module path: C:\Windows\SYSTEM32\ntdll.dll
Report Id: 7630c4b0-7707-11e0-8419-00155d010609

Если бы я попытался изменить AppPool для включения 32-битного приложения, WSDL даже неполучить, и я получаю:

A process serving application pool 'MyAppPool' suffered a fatal communication error with the Windows Process Activation Service. The process id was '2856'. The data field contains the error number.

Я потерян, и я не знаю, что делать.Как может быть так сложно выполнить «простую» и типичную настройку Oracle?Какую проблему я бы попытался решить?Кто-нибудь знает о блоге, который показал бы, как правильно настроить это?Я пытался искать, но ничего не смог найти, и я уверен, что я не единственный с этой проблемойНу, любая помощь будет очень признательна.Так много

РЕДАКТИРОВАТЬ

Я снова пытаюсь использовать ODP.NET, так как из-за всех проблем возникла попытка использовать OracleClient от Microsoft.Я установил 64-разрядную версию OPD.NET2 на своей машине для разработки, в Справочнике проекта, удалил 32-разрядную ссылку и вручную ссылаюсь на 64-разрядную версию Oracle.DataAccess.dll.Всякий раз, когда я делаю это, я не могу использовать решение на своей Dev Machine, так как я получаю сообщение об ошибке:

Could not load file or assembly 'Oracle.DataAccess' or one of its dependencies. An attempt was made to load a program with an incorrect format.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.BadImageFormatException: Could not load file or assembly 'Oracle.DataAccess' or one of its dependencies. An attempt was made to load a program with an incorrect format

Это, вероятно, связано с тем, что он пытается загрузить 32-разрядный ODACвместо 64-битного.Но после развертывания на моем 64-разрядном сервере я прекращаю получать исключение FileNotFoundException, но начинаю получать:

System.TypeInitializationException: The type initializer for 'Oracle.DataAccess.Client.OracleConnection' threw an exception. ---> Oracle.DataAccess.Client.OracleException: The provider is not compatible with the version of Oracle client
   at Oracle.DataAccess.Client.OracleInit.Initialize()
   at Oracle.DataAccess.Client.OracleConnection..cctor()
   --- End of inner exception stack trace ---

Ответы [ 3 ]

8 голосов
/ 26 мая 2011

Я удалил 32-битную ссылку и вручную ссылаться на 64-битные Oracle.DataAccess.dll. Всякий раз, когда я делаю это я не могу использовать решение на моей машине разработчика, так как я получаю Ошибка:

Could not load file or assembly 'Oracle.DataAccess' or one of its dependencies. An attempt was made to load a program with an incorrect format.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.BadImageFormatException: Could not load file or assembly 'Oracle.DataAccess' or one of its dependencies. An attempt was made to load a program with an incorrect format

У меня была такая же проблема на моей dev-машине. Я проверил настройки пула приложений в IIS, и оказалось, что для параметра «Включить 32-разрядные приложения» установлено значение «True». Я работаю только с 64-битными приложениями, поэтому для меня было безопасным установить для этого параметра значение по умолчанию: «False». После этого у меня все отлично работает.

Вы можете изменить этот параметр в IIS 7 Manager. Щелкните правой кнопкой мыши пул приложений и выберите «Расширенные настройки ...». Он входит в группу "(General)".

3 голосов
/ 06 мая 2011

Хорошо, я смог заставить его работать, используя Oracle ODP.Net.Просто выполните следующие действия:

  • На компьютере разработчика установите последнюю версию Oracle ODAC 64bits XCOPY, используя что-то вроде install.bat all c:\oracle\64 oracle_home
  • В Visual Studio 2010 в разделе Ссылки удалитеСсылка на Oracle.DataAccess по умолчанию, так как она 32-битная.Перейдите по ссылке, и внутри 64-битной установки ODAC вы найдете \ odp.net \ bin \ 2.x \ Oracle.DataAccess.dll.Ссылка на этот
  • Перестройте свое решение
  • Так как я использую WCF / IIS / AppFabric, я выбираю Build Deployment Package
  • На 64-битной версии W2k8 R2 установите ту же самуюOracle ODAC 64-битный ODAC, используемый на компьютере разработчика
  • Сброс IIS
  • Чтобы избежать проблем TNS, поскольку полный клиент не будет установлен, используйте строку подключения:

    Источник данных = (ОПИСАНИЕ = (АДРЕС = (ПРОТОКОЛ = TCP) (HOST = SERVERHOSTNAME) (PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = ORCLSID)))); Идентификатор пользователя = пользователь; Пароль = blablabla;

  • Установите пакет развертывания на IIS / AppFabric, как обычно.

  • Должно работать нормально

Tks @ rlee923 для вашегопомощь!

2 голосов
/ 05 мая 2011

Вы загрузили и установили 64-битную версию клиента?

Похоже, файл dac dataaccess oracle является 32-битным.

если у вас его нет, я не уверен, есть ли ещепроблема с установкой 64-битной версии клиента с R2, но вам может потребоваться изменить xml-файл установщика для работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...