远程连接服务器的数据库调试 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 位应用程序.
当然, 可能每个人出现该错误的原因都有所不同, 所以这里只是提供一种解决问题的思路, 具体应根据实际情况寻找解决方案.
来源: http://www.bubuko.com/infodetail-3010475.html