问题
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