关于oracle32位64位组件运行问题
前两天遇到一个问题,oracle64位客户端,64位服务器,然后我写了一个C/S模式的小程序,部署到服务器上,运行到连接数据库并从数据库提取数据时,提示什么“加载oracle客户端库时引发BadImageFormatException”32位64位的问题,果断感觉是编译的问题,把编译模式改为AnyCpu,然后又遇到了引用相关dll不是64位,无法加载运行的问题,然后去重新编译了64位的dll组件。ok,一切正常了。
可是,今天又无语了,同样的部署环境,同样的客户端调用连接以及操作数据库的方法,我还是用AnyCpu模式编译的,然后又出了这oracle32位64位的问题。当时就无语了,感觉这怎么可能呢,理了理思路,因为这次部署的是一个B/S模式的程序,出这样的问题一定是因为B/S和C/S程序不同的地方除了问题。那么,哪里不同呢,我想到了IIS这个家伙,然后在网上查了下资料,哈哈,果然是这个家伙在搞鬼,我果断找到IIS中的“应用程序池设置”,将“启用32位应用程序”改为false,OK,一切正常了。其实,回头想下,根本原因还是自己没有理解IIS中的“启用32位应用程序”,刚开始理解的是“开启了这玩意,那么运行的时候不管是32位的和64位的,都会通吃”,结果证明,是自己太天真了。其实,“启动32位应用程序”的话,会直接导致你的应用程序池是以32位模式运行的,这样,要调用64位服务器下的64位oracle肯定会报错!mark一下,争取不再 犯同样的错误。
ps:感觉需要好好思考下软件设计方面的问题,以前不觉得这多么重要,但是现在越来越感觉到软件设计还有对系统全局把握的重要性。设计的好,直接提供了几个便利:1.写代码时思路特别清晰,错误率低,调试和自测时会特别顺畅。2.为什么要有面向对象?我记得有这么一句话“面向对象的软件设计思路可以用来支持大型系统的设计,负责维护会变得相当艰难”,现在终于感受到了,封装,继承,多态短短的六个字中包含了多少的精华思想和经历。设计的好坏直接决定了你系统的可扩展性和可维护性。
还有,对日志文件的理解今天也有了更进一步的提升,日志文件真的很重要。是一种凭证,证明你确实做过了某些事情;也同时是一个很好的调试助手,帮助你发现错误出现的地方。