天天看点

在64位的环境中使用VS建立Web项目进行Oracle连接需要注意WebDev是32位的

我们平时使用的都是32位的机器进行开发,装的都是32位的软件,但是我们的服务器一般都是64位的,所以有时也需要在64位的环境下装一个vs调试程序。最近遇到的一个问题就是一个同事换了一个电脑,用的是x64的windows 2008作为操作系统,要进行oracle的数据库连接,所以也装了64位的oracle客户端。如果是控制应用项目或者winform项目可以正常连接oracle,但是web项目在程序中打开oracle连接时,系统抛出了异常:

尝试加载 oracle 客户端库时引发 badimageformatexception。如果在安装 32 位 oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。

显然,这个提示的不正确,因为我们装的就是64位的客户端,所以并不存在64位程序调用32位客户端的情况。难道是生成的程序是32位的,然后32位调用了64位的客户端,于是我把程序属性中的生成平台改为x64,如图所示:

在64位的环境中使用VS建立Web项目进行Oracle连接需要注意WebDev是32位的

结果这样生成的webservice程序在调用时还是报同样的异常。这个问题困扰了我一天,其中想到的解决办法就是把64位的客户端卸载了,在x64的操作系统中安装32位的客户端,然后这样就可以了,但是如果不是web应用(比如控制台应用程序或者winform程序)却同样报错,那就需要将非web应用的项目按照上图的设置方法,将生成的平台改为x86才能正常运行。

解决办法:

这当然是一个折中的办法,今天终于发现了真正的原因,原来vs在建web项目时,平时运行使用的是自带的webdev.webservier是一个32位的服务,所以在其中运行的web项目不管怎么设置平台,都只能作为32位的应用来看待,所以在web项目运行时连接64位的oracle客户端会报错,而非web项目就不会。

在64位的环境中使用VS建立Web项目进行Oracle连接需要注意WebDev是32位的

网上搜了一下,好像wedev服务好像没有64位的,所以要解决这个问题,那么就不要使用这个服务作为web服务,而使用iis,因为iis使用的是w3wp,在64位的操作系统中是64位的,所以可以正常使用64位的oracle客户端。具体设置如下:

在64位的环境中使用VS建立Web项目进行Oracle连接需要注意WebDev是32位的

这样设置后,每次运行就好以iis来运行,不管是web项目还是控制台应用项目或者winform项目,都会正常连接oracle了。