使用 ODP.NET 64 位的 .NET Web 服务

发布于 2024-12-11 16:35:03 字数 1453 浏览 0 评论 0原文

我在.net4.0中创建了一个Web服务。它通过 ODP.NET4 连接到 oracle 数据库。仅供参考,我使用了 ODAC112021Xcopy_X64 并安装了 odp4 和 asp4。该服务在开发环境中运行良好。

但将其发布到在同一台计算机上运行的 IIS 后,出现以下异常:

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]

我使用 64 位 odp.net,我在 Windows Server 2008 R2 64 位上运行,并在 Visual Studio 中切换到 64 位。

谁能告诉我我错过了什么或做错了什么?

我还尝试将 ORACLE.DATACCESS.dll 复制到 bin 文件夹。

提前致谢

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦魇绽荼蘼 2024-12-18 16:35:03

这是一个盲目的尝试,因为我无法重现该问题,但是在 IIS 中运行时,您需要确保您正在使用的特定框架(此处为 4.0)的信任级别可以访问适当的 dll 和文件。

您可以卸载/重新安装 odp 位,或者
直接调用“oracle权限”软件
%ora_home\product\11.2.0\client_1\odp.net\bin\4\OraProvCfg.exe

另外,请查看自述文件(特别是这部分):
%ora_home\product\11.2.0\client_1\odp.net\doc\readme.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.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" />

专门检查这些配置文件(“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" />

(此自述文件来自 EF 的 beta 3,所以我希望版本号有所不同)

您也可以查看此论坛(它看起来与此思路类似)
https://forums.oracle.com/forums/thread.jspa?threadID=575320

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

余生一个溪 2024-12-18 16:35:03

检查编译器计算机(32/64 位)中的 ODAC 目标平台是否与放置 Web 服务的生产服务器相同。

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文