部署使用Oracle.DataAccess的Web服务器导致各种汇编错误

问题描述:

我的开发机器是Vista x64。部署使用Oracle.DataAccess的Web服务器导致各种汇编错误

我正在使用WCF Web服务来构建与Oracle 10g数据库接口的Web服务。

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

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

我想部署到安装了.NET 3.5 SP1的Win2003 [IIS 6],并安装了Oracle 10g数据库。此服务器上的其他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的副本,我斌/文件夹中,我得到:

“无法加载文件或程序集Oracle.DataAccess'或它的一个依赖的设程序集的清单定义与程序集引用不匹配(来自HRESULT的异常:0x80131040)“

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

如果我添加集的引用我的web.config,我得到一个配置错误:“无法加载文件或程序XXX”

我想我寻求帮助了解程序集缓存,有人谁有ODP.net的经验,谁可以帮助我导航这个诡territory的领土,并成功部署这项服务。

好吧我设法[部分]解决它,但我仍然需要知道为什么这导致了错误。

我在本地机器上安装了ODP.NET 32位,位于64位安装的单独文件夹中。我将VS项目中的程序集引用改为位于odp.net/bin/2.x/文件夹中的Oracle.DataAccess.dll。

现在,SOAP消息不再引发错误。

现在的问题是:为什么我的开发环境中的dll选择驱动必须在生产环境中使用的dll?我希望能够在64位上开发并部署到32位服务器,而无需在每次我想部署时更改我的引用。

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

+0

也请点击此处:http://*.com/a/10557694/114029 – 2013-08-20 18:33:57

我公司的运行在64位运行到同样的问题,我们必须解决使用32位DLL缺乏更好的解决方案。

从我们所知道的,Oracle的64位dll专为64位构建。与使用“Any”的dll构建不同,它不包含32位目标代码。这很好,除了32bit dll似乎无法加载的所有这个额外的问题,除非该项目专为32位构建。

我们已经尝试了64/32位dll和项目设置的几十次迭代,除了32位dll/32bit项目,我们已经完全无法获得任何工作。最后,我们不得不推进这个项目,并停止投入时间来进行无尽的斗争。

如果可能,我诚实的建议是评估其他数据库解决方案。我与甲骨文的经验已经非常痛苦

否则,只需构建在32位。它不应该导致任何问题。