远程连接服务器的数据库调试WCF程序时,可以正常访问数据库,但将程序发布成站点部署在数据库所在的服务器之后,一直报错,通过try/catch捕获得到以下报错信息:
System.Exception: SELECT CODE,NAME,LEVEL FROM SYSUSER WHERE CODE=12345\u000d\u000a尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。
根据报错信息可以初步判断,出错原因是:项目中连接Oracle用的System.Data.OracleClient和服务器上安装的Oracle客户端位数不同。
本人根据网上提供的各种方法尝试了很久:
- 将程序的平台目标改为X86
- 安装Oracle 11gR2 32-bit的客户端
- 在工具网站中设置对网站和项目使用IIS Express64位版
- ....
但都没能解决问题。
最终我想既然是和程序的位数有关,于是死马当做活马医,在IIS中将程序所在应用程序池中的“启用32位应用程序”改为false,最终解决了问题。
此处建议新建一个应用程序池,不要直接修改DefaultAppPool,防止其它程序使用时需要启用32位应用程序。
当然,可能每个人出现该错误的原因都有所不同,所以这里只是提供一种解决问题的思路,具体应根据实际情况寻找解决方案。
原文地址:
转载请注明出处,谢谢!