.NET Webservice using ODP.NET 64bit

谁都会走 提交于 2019-12-10 12:12:51

问题


I created a web service in .net4.0. It connects to an oracle-database by ODP.NET4. FYI I used ODAC112021Xcopy_X64 and installed odp4 and asp4. The service runs well in development environment.

But after publishing it to IIS running on the same machine I get the following exception:

System.ServiceModel.FaultException`1 was unhandled
  Message=Could not load file or assembly 'Oracle.DataAccess, Version=2.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
  Source=mscorlib
  StackTrace:
    Server stack trace: 
       at System.ServiceModel.Channels.ServiceChannel.ThrowIfFaultUnderstood(Message reply, MessageFault fault, String action, MessageVersion version, FaultConverter faultConverter)
       at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)
       at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
       at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
       at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
    Exception rethrown at [0]

I use 64bit odp.net, I'm running on Windows Server 2008 R2 64bit and switched to 64bit in Visual Studio.

Can anybody tell me what I'm missing or doing wrong?

I also tried to copy the ORACLE.DATACCESS.dll to the bin folder.

Thanks in advance


回答1:


This is a shot in the dark since I cannot recreate the issue, but when running in IIS you need to make sure that the trust levels for the specific framework (herein being 4.0) you are using can access the appropriate dlls and files.

you can either uninstall/reinstall the odp bit, or directly call the 'oracle permission' software at %ora_home\product\11.2.0\client_1\odp.net\bin\4\OraProvCfg.exe

Also, check out the readme (specifically this part): %ora_home\product\11.2.0\client_1\odp.net\doc\readme.txt (here's the blurb that I think may be of interest to you)

==============================
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.NET\Framework\{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" />

specifically check out those config files ("web_hightrust.config" and "web_mediumtrust.config") search for a similar entry

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

(this readme is from the beta 3 for the EF so I would expect the version numbers to be different)

You can also look at this forum (it appears similar to this line of thought) https://forums.oracle.com/forums/thread.jspa?threadID=575320

hth




回答2:


Check if ODAC target platform in your compiler machine (32/64 bit) is the same of production server where you put your web services.



来源:https://stackoverflow.com/questions/7846432/net-webservice-using-odp-net-64bit

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!