提问人:Patrick McDonald 提问时间:9/8/2009 最后编辑:Patrick McDonald 更新时间:9/9/2009 访问量:1144
在 Windows XP 32 位上针对 Windows Server 2003 64 位进行开发
Developing for Windows Server 2003 64 bit on Windows XP 32 bit
问:
我一直在Windows XP Professional上开发 ASP.NET 应用程序。在升级到生产环境时,我才发现服务器是 64 位的。我在服务器上安装了 Oracle Client 32 位,但无法连接到 Oracle。
我正在使用 Microsoft Provider for Oracle,我的问题是,如何让在 32 位计算机上编译的 ASP.NET 应用程序连接到 Windows Server 2003 64 位计算机上的 Oracle?
编辑:
在回答对我最初问题的评论时,我得到的错误是“尝试加载 Oracle 客户端库抛出了 BadImageFormatException。在安装了 32 位 Oracle 客户端组件的 64 位模式下运行时,将出现此问题”
我已经卸载了 32 位客户端并安装了 64 位客户端,问题是服务器是 DMZ 中的生产服务器,我自己无法访问服务器,所以我试图预测安装 64 位客户端时会遇到任何问题,并尝试访问服务器上的 ASP.NET 应用程序
答:
要尝试的另一件事是将托管应用程序的应用程序池设置为 32 位模式。http://extended64.com/blogs/rhoffman/archive/2005/05/10/482.aspx
这应该允许加载 32 位驱动程序。
简单的解决方案:您应该根据平台(x64 机器上的 x64)安装 Oracle 客户端。原因是您的 .NET 应用程序很可能是在 AnyCPU 配置中构建的,这意味着它将在 x64 平台上作为 x64 应用程序运行。然后它只能加载 x64 本机库...
请注意,当谈到 Oracle 时,我喜欢使用 Oracle Instant Client :
- 您不必在目标计算机上安装任何东西(包括开发箱!
- 可以确保应用程序将与所选的特定客户端(版本、x86/x64)一起运行。
- 您甚至可以轻松地让多个应用程序在同一台计算机上使用不同的客户端版本。
- 不利的一面是,它为您的应用程序增加了很大的权重(最小 ~19Mb)。
有关详细信息,请查看将 C# 连接到 Oracle 数据库所需的最小客户端占用空间是多少?
在您的特定情况下,我建议设置一个可在 x86 和 x64 计算机上工作的 Visual Studio 项目:查看我的博客文章 Visual Studio 中的 Oracle Instant Client。然后,下面是有关如何为面向 x86 或 x64 计算机的 Oracle Instant Client 配置 WiX 包的指南。如果使用其他部署策略,只需确保根据目标平台提供正确的客户端即可。
评论