将.netFramework4.5/MVC4/EF5/Oracle网站发布到Server2008/iis7的痛苦经历

一个项目,开发环境是win7 ultimate x64, visual studio ultimate 2012,Oracle10g的数据库

技术选型有:.net framework4.5, Mvc4, entity framework 5, simpleinjector

再没有别的新货了,开发阶段倒是顺顺利利,全套VS环境嘛,考虑发布到服务器的时候就不同了:

服务器环境:windows server 2008(貌似非R2版,求看server2008是否R2的方法)x64,.net framework4.0,有安装oracle数据库服务器在上面。

一发布,403,应该是framework的原因吧,好,装4.5,重启,刷新,问题依旧

经过一通海搜,各种测试最终只有一句话是靠谱的:在web.config加入如下节点:

<system.webServer>
	<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>

满心激动地刷新,网站能访问了。我又不得不感叹一次中文网络资源匮乏,反正我在整个中文网络是没找到这个解决方案,原文见此

满以为问题解决,结果一登录,杯具了,报错,查日志:指定的存储区提供程序在配置中找不到,或者无效。

又是一通海搜,各种方案:加connectionstring, 到machine.config的DBProviderfactoriew添加驱动字串,用GAC注册dll等等等等,无一有效,特别离谱的是找GacUtil.exe的时候发现我的服务器上压根连那目录都没有,连着找了好几台服务器,都没有像我的win7一样的目录结构,反正我没寄希望在GacUtil上,于是放弃,继续苦苦地搜索。

到oracle官网下了最新的提供程序,ODTwithODAC1120320_32bit.zip,就是ODAC加一个可以给vs用的开发工具(ODT),因为vs只有32位版的,所以这个包也只提供32位的。装了后同样满心激动地刷新网站,丝毫问题都没解决。

插曲:我试着在自己的电脑上做了一个winform程序,用EF来连oracle取数据,居然也报出了同样的问题,除非在生成项里把目标平台改成x86。于是我又试着在any cpu, x86, x64这间不断切换发布,结论是:x86的发上去压根就跑不起来,而anycpu和x64的则还是老问题,看样子跟发布也没什么关系。

我试图在服务器上装visual studio 2012来再现开发环境,可居然弹出提示需要更新的系统~~~~这条路也堵死了。

期间我睡了一觉,吃了早饭,中饭,晚饭,突然想到,还有一条路没试,ODAC有单独的64位版的,我何不试试?于是卸载之前的ODTwithODAC那一套,重新安装独立的odac x64,文件名是:ODAC1120320Xcopy_x64.zip。解压后,一个命令:install.bat all E:\oracle odac,很短的时间过去(完全不像带odt的那个),我都以为没成功,但跑到我指定的E:\oracle一看,文件都在,然后把这个目录添加到环境变量PATH一节后,重置了一下IIS,“抱着试试看的心情”再去刷了下网页,登录,成功!

 

总结:

1,iis7可以跑.net framework4.5的程序,应用程序池选4.0就可以了

2,发布到iis7上要加的那个system.webServer节点不要忽略了,这一点比较蛋疼,没有理由,照抄就是

3,oracle的提供程序ODAC一定要对版,我没空去问这台机器上的oracle装的是64位的还是32位的,但操作系统是64位的,实践证明了ODAC也要对应(跟操作系统对应还是跟oracle对应有空再实验,我要回去睡觉了)

posted @ 2012-10-27 22:10  $walker  阅读(959)  评论(0编辑  收藏  举报