刚进公司,因项目组目前的项目已接近尾声,暂时无法插手,只好干等下个项目开工,这几天都接连在公司里打着酱油。昨天下午Leader终于分配我入职以来的第一个任务:把公司目前的项目部署到IIS服务器中供其他人测试使用。
之前从未尝试过部署项目,对iis是一无所知,所以花费了近1天的时间才把项目最终发布成功,其实真正发布完成之后,才发现其实蛮简单的。其中一步步如今看来苦笑不得的探索过程就免去了,此处把几个关键点指出来,希望新手可以不再像我一样绕来绕去。但因为本人积累有限,且对iis这些相关理论知识完全不知,以下解决方案只能确保在我所遇到的问题中有效,其他适用丝毫没有把握。不足之处,望各位过客指正,大家一起探讨。
1,明确项目相关环境
我本机A的开发环境为VS2010(MVC3)+Oracle.DataAccess.dll远程连接oracle数据服务器;
测试用服务器B的环境比较复杂(那台服务器似乎被N多人使用,关键是发现里面ocacle安装有不止一个版本,且本人从未接触过oracle,故也不知)
服务器B为:Windows2003 Server+IIS6.0+xxOracle数据库+.net4.0;
2,匹配环境
很明显,不可能更改项目的开发环境,所以此时需要的是把服务器B的运行环境和A机一致,即.NET4.0+MVC3(非必须)+对应Oracle连接版本
.Net版本这个必须一致,服务器需要对应版本的.NET运行时来运行编译过的程序;
MVC3是因为在开发MVC3时用到了一些MVC自带的库文件,其实仅把项目里引用到的MVC库文件copy到bin文件目录里应该也行,但自己懒得去一个个查找了,直接在服务器上安装了MVC3,这样当在项目库里找不到对应的.dll文件时,会去在服务器本地目录里超找.dll文件。
Oracle连接版本,这个有点蛋疼。。。我查看了项目文件里的引用为Oracle.DataAccess.dll,版本似乎为11.2.0。而且bin文件夹里有Oracle.DataAccess.dll这个库文件。无奈服务器里还有其他版本的oracle客户端,直接导致在运行时数据库连接出错,提示版本不对。在网上查找后,最后的解决办法是把bin文件夹里的Oracle.DataAccess.dll文件删除掉,服务器上直接又安装了A机里开发用的Oracle客户端。。。结果,真匹配正确了。(不解中)
3,提取发布项目需要的文件
我知道至少有3种方法应该可以把本机的项目文件发布到服务器的iis上,无奈自己从能成功的方法里择优选择就是方法iii了。
i,把项目build之后,把bin文件夹放到服务器中,然后配置iis,结果此时发现从浏览器浏览到得全是bin目录里的源文件(不解中)。
ii,把整个项目文件copy出来,放到服务器中,配置iis,这个,当然成功了,只是自己总觉得不太好,整个项目文件100多M呢。
iii,用vs2010把项目发布到本机,前提是自己电脑里安装好了iis。对应win7系统而言,这是再简单不过了,发布到本机的过程如下:
①以管理员权限打开vs,再打开项目;
②右键点击项目文件,选择Publish,
其中,Publish Profile随意,Publish method选择为Web Deploy ,Service URL输入为localhost(因为是发布在本机);Site/application这一栏,site必须填写iis里已经存在的site,iis里默认存在的就是Default Web Site,application随便写。下面的两个选项选中。点击publish。然后vs2010会在本机通过iis发布此项目,并显示发布结果。
③此时,本机的iis里对应的site里会有application了,不过这对我们来说无关紧要,重点是它默认把项目文件夹经过发布必须的优化调整后,放在C:\inetpub\wwwroot对应的application文件夹里,此时原本100多M的项目文件仅剩40M左右(当然,bin文件夹仅有20M左右)。这个40M的applicaton文件正是我们发布所需要的。把它copy到服务任意目录即可。(此处假设为D:\test);
4,配置服务器iis
①开始->运行输入:inetmgr,打开iis管理器(控制面板中也可找到);默认如下:
②向iis注册.net4.0
点击Web Service Extensions ,确保asp.net4.0是允许的,如下图
即要求iis支持调用.net4.0版本来处理一些web请求。如果是先安装iis,再安装.net4.0,此处默认是支持的,但反过来的话,可能此处不会出现asp.net4.0,需要把asp.net注册到iis中,方法如下
开始,运行cmd 调用 命令行:
cd C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319
然后输入:aspnet_regiis -r调用.net里的程序来向iis注册.net4.0。(当然,其他版本类似)
③新建应用程序池
右键点击applicaton pool,为自己的网站新建专用应用池(即确保一个应用程序池里仅有一个网站)。昨天一直都在郁闷自己的网站通过iis发布后始终不能成功的原因就是iis有默认的网站,用的是默认应用池,而自己新发布的网站也用的是默认应用池,结果出现了各种各样的意外,网站不经不稳定,而且一直都没能成功浏览。所以强烈建议每发布一个网站,就新建一个application pool,通过后面的配置可以把application pool和web site关联起来。
④新建web site用来发布自己的网站
右键点击web site,new website,到如下图步骤是注意
为网站输入ip地址,这一栏默认就为不指定,此时就是服务器的ip本机地址。当然有的服务器通过路由后可以有多个ip地址,自己没试过。但不指定却是可以成功。
TCP端口这里默认的是80,80是默认的端口,即在输入服务器ip:80和ip,是一样的效果。推荐更改为自己喜欢的某个端口,防止服务器中的有其它网站使用此端口(当然通过指定不同的 Host header,可以共用同一个端口)。
Host header即为网站的域名,如http://test.com,如果要通过此域名在服务器中访问网站,需要修改hosts文件,如 127.0.0.1 www.test.com,这样在服务器浏览器中不用输入localhost:端口号 只输入www.test.com即可。但对于从其他机器访问而言,还是需要输入 服务器ip:端口号 的方式来访问到对于的网站,故意义不大。一般不输入host header。
到下一步:
这里注意要选择到我们之前从项目文件里发布出来得到的那个文件夹。
到下一步里选择读写权限,我一般是除了写权限以外都允许了。
再下一步即可完成网站的建立,但这还没完。
⑤配置web site,以便iis能调用正确的程序去处理对应的页面请求
右键点击web site,属性中
asp.net页要选择为对应的版本:此处为asp.net 4.0,以便iis调用.net4.0来处理。
home directory中要配置以便能调用专门的程序来处理mvc网站。
application pool要选择之前建立的专用的application pool;
点击Configuration,然后点击insert,选择C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll,通过它来处理mvc的相关转化。
在document中来指定默认的访问页面:
但对于mvc网站而言,此处不需要修改。
至此,大功告成,别忘了重新启动网站。右键点击网站,brower,即可看到网站运行的效果。