Веб-сервис .NET, использующий ODP.NET 64-битный

#web-services #odp.net

#веб-сервисы #odp.net

Вопрос:

Я создал веб-службу в .net4.0. Он подключается к базе данных oracle с помощью ODP.NET4. К вашему сведению, я использовал ODAC112021Xcopy_X64 и установил odp4 и asp4. Служба хорошо работает в среде разработки.

Но после публикации его в IIS, работающем на том же компьютере, я получаю следующее исключение:

Система.ServiceModel.FaultException`1 не был обработан
 Сообщение = Не удалось загрузить файл или сборку 'Oracle.Доступ к данным, версия = 2.112.2.0, Культура = нейтральная, PublicKeyToken = 89b483f429c47342' или одна из его зависимостей. Определение манифеста найденной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)
 Источник= mscorlib
 Трассировка стека:
 Трассировка стека сервера: 
 в системе.ServiceModel.Каналы.Канал обслуживания.Throwiffaultunderstooded(ответ на сообщение, ошибка MessageFault, действие строки, версия версии MessageVersion, FaultConverter faultConverter)
 в системе.ServiceModel.Каналы.Канал обслуживания.Ошибка обработки (операция ProxyOperationRuntime, ProxyRpc и rpc)
 в системе.ServiceModel.Каналы.Канал обслуживания.Вызов (строковое действие, логический oneway, операция ProxyOperationRuntime, входы объекта [], выходы объекта [], тайм-аут временного интервала)
 в системе.ServiceModel.Каналы.ServiceChannelProxy.invokeService(вызов метода IMethodCallMessage, операция ProxyOperationRuntime)
 в системе.ServiceModel.Каналы.ServiceChannelProxy.Вызов (сообщение iMessage)
 Повторное создание исключения в [0]

Я использую 64-битный odp.net , я работаю на 64-битной версии Windows Server 2008 R2 и переключился на 64-битную версию в Visual Studio.

Кто-нибудь может сказать мне, чего мне не хватает или что я делаю неправильно?

Я также попытался скопировать ORACLE.DATACCESS.dll в папку bin.

Заранее спасибо

Ответ №1:

Это выстрел в темноте, поскольку я не могу воссоздать проблему, но при запуске в IIS вам необходимо убедиться, что уровни доверия для конкретной платформы (в данном случае 4.0), которую вы используете, могут получить доступ к соответствующим библиотекам DLL и файлам.

вы можете либо удалить / переустановить бит odp, либо напрямую вызвать программное обеспечение «oracle permission» по адресу %ora_homeproduct11.2.0client_1odp.netbin4OraProvCfg.exe

Кроме того, ознакомьтесь с readme (в частности, с этой частью): %ora_homeproduct11.2.0client_1odp.netdocreadme.txt (вот рекламный ролик, который, я думаю, может вас заинтересовать)

 ==============================
ORACLEPERMISSION RELATED NOTES
==============================

1. Configuring OraclePermission for Web Applications in high or medium trust

For Web Applications operating under high or medium trust, OraclePermission 
needs to be configured in the appropriate "web_<trust level>.config"  file so 
that the application does not encounter any security errors.  This 
configuration can be done through the OracProvCfg tool. OraProvCfg.exe will
make the appropriate entries in both web_hightrust.config as well as 
web_mediumtrust.config associated with the specified .NET framework version. 

Given below is an example on the usage of OraProvCfg tool for configuring 
OraclePermission in a .NET 2.0 web application:

    OraProvCfg.exe /action:config  /product:odp /component:oraclepermission 
                   /frameworkversion:v4.0.30319
                   /providerpath:<Oracle.DataAccess.dll full path>

On running the above command, The following entry will be made in  
"web_hightrust.config" and  "web_mediumtrust.config" under ASP.NET permissionset

<IPermission class="Oracle.DataAccess.Client.OraclePermission, Oracle.DataAccess, Version=4.112.2.50, Culture=neutral, PublicKeyToken=89b483f429c47342" version="1" Unrestricted="true" />

OraProvCfg can also be used to remove these entries from these config files 
when they need to be removed.

    OraProvCfg.exe /action:unconfig  /product:odp  /component:oraclepermission
                   /frameworkversion:v4.0.30319
                   /providerpath:<Oracle.DataAccess.dll full path>


2. Configuring OraclePermission For Windows Applications in partial trust

For Windows applications operating in a partial trust environment, the 
OraclePermission entry should be specified under the appropriate permission 
set in security.config file. (Security.config is available in 
%windir%Microsoft.NETFramework{version}CONFIG). The example below 
specifies the OraclePermission entry that would be required for a .NET 2.0 
Windows application

<IPermission class="Oracle.DataAccess.Client.OraclePermission, Oracle.DataAccess, Version=4.112.2.50, Culture=neutral, PublicKeyToken=89b483f429c47342" version="1" Unrestricted="true" />
 

в частности, проверьте эти файлы конфигурации («web_hightrust.config» и «web_mediumtrust.config«) для поиска аналогичной записи

 <IPermission class="Oracle.DataAccess.Client.OraclePermission,
Oracle.DataAccess, Version=4.112.2.50, Culture=neutral,
PublicKeyToken=89b483f429c47342" version="1" Unrestricted="true" />
 

(это readme из бета-версии 3 для EF, поэтому я ожидаю, что номера версий будут другими)

Вы также можете посмотреть на этот форум (похоже, это похоже на эту мысль) https://forums.oracle.com/forums/thread.jspa?threadID=575320

hth

Ответ №2:

Проверьте, совпадает ли целевая платформа ODAC на вашем компьютере-компиляторе (32/64 бит) с производственным сервером, на котором вы размещаете свои веб-службы.