.net - 部署使用 Oracle.DataAccess 的 Web 服务器会导致各种程序集错误

标签 .net wcf oracle odp.net

我的开发机器是 Vista x64。

我正在使用 WCF Web 服务来构建连接到 oracle 10g 数据库的 Web 服务。

开发开始时,我无法在 32 位 Oracle.DataAccess.dll 上使用 VS2008 的内置 WCF 测试工具 [WCFTestClient],该工具在您按 F5 [Go] 时启动,因为我在 Oracle 对象上得到 System.BadImageFormatException。因此,在我的开发环境中,我为引用的程序集切换到 ODP.NET 64 位版本,效果很好。

我可以部署到我的本地 IIS [7],但前提是我使用 32 位 Oracle.DataAccess.dll。

我正在尝试部署到安装了 .NET 3.5 sp1 和 Oracle 10g 数据库的 Win2003 [IIS 6]。此服务器上的其他 Web 应用程序成功使用了 oracle 连接。

如果我从 web.config 文件中删除对 Oracle.DataAccess 的所有引用,并确保我的 bin/文件夹中没有 Oracle.DataAccess.dll,我可以调出默认服务元数据页面 [s],但调用该服务通过 SOAP 客户端导致错误:

“无法加载文件或程序集 'Oracle.DataAccess, Version=10.2.0.100, Culture=neutral, PublicKeyToken=89b483f429c47342' 或其依赖项之一。系统找不到指定的文件。”

但是,如果我将 Oracle.DataAccess.dll 的副本放在 bin/文件夹中,则会得到:

“无法加载文件或程序集‘Oracle.DataAccess’或其依赖项之一。定位的程序集的 list 定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)”

尝试在 Web 浏览器中加载 .svc 页面时。

如果我向 web.config 添加程序集引用,则会收到配置错误:“无法加载文件或程序集 xxx”

我想我正在寻找帮助理解程序集缓存,以及有 ODP.net 经验的人可以帮助我在这个危险的领域中导航并成功部署此服务。

最佳答案

最近遇到了类似的问题,发现 System.BadImageFormatException 是由于从指定目标平台为 Any/x64 的项目中引用了 32 位版本的 Oracle.DataAccess 引起的。将项目设置为面向 x86 并配置 IIS 7 以启用 32 位应用程序(右键单击应用程序池 -> 高级设置...将“启用 32 位应用程序”设置为 true)一切似乎都按预期工作.另外,here是一篇文章的链接,该文章解释了如何让 32 位和 64 位版本在不同的工作进程和另一个 here 上运行。解释如何使用 IIS 6 让 32 位应用程序在 64 位上运行。

关于.net - 部署使用 Oracle.DataAccess 的 Web 服务器会导致各种程序集错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1883792/

相关文章:

c# - Task<> 不包含 'GetAwaiter' 的定义

WCF 使用 Windows 服务

sql - 执行 (28 : 6): ORA-00600: internal error code, 参数 : [], [], [], [], []

oracle - 如何从可能的编码列表中将 Oracle VARCHAR2 值转换为 UTF-8?

c# - 必须使用 C++ dll 来调用 C# .NET 方法吗?

c# - Silverlight 验证。电子邮件验证问题

c# - 在中间不执行其他命令的情况下执行 2 个 SQL 命令的正确方法

.net - 如何获得来自主音频 channel 的当前声音的响度?

c# - IIS 的 WCF 服务宿主,spring.net 范围 ="request"

oracle - 如何在oracle sql developer中运行存储过程?