MVC网站部署方案
前言:本方案是概述ESEarthServer项目在服务器上的部署方法、步骤,以及注意事项和遇到问题的解决方法。
开发环境:WIN XP 32位+VS2010+.net framework 4.0+MVC4.0
部署环境:WIN SERVER 2008 R2 64位+.net framework 4.0+IIS7.0
1、VS网站导出
1.1 首先在项目的引用中 找到如下 三个 程序集:
System.Web.Mvc ,System.Web.Routing, System.Web.Abstractions
在以上三个dll引用上:右击—》属性—-》复制到本地—-》设置为true
如图:
1.2. 从VS2010中导出网站
在VS2010中编译好 Solution,然后在菜单栏选择Build——Publish Test(这里Test是Solution名称)弹出如下窗口
网站存放在C:\inetpub\ESEarth,可以自己定义存放路径。生成如下图:
2、安装IIS
Windows Server 2008安装IIS
2.1右键点击“计算机”,在弹出菜单中选择“管理”选项,在服务器管理器左侧界面点击“角色”选项,点击“添加角色”按钮后,弹出如下界面
2.2、选择“角色”列表中的“Web服务器(IIS)”和“应用程序服务器”,点击“下一步”,弹出如下的效果界面:
点击“添加必须的功能”按钮后,进行下一步操作:
点击“下一步”
点击“下一步”
安装完成后,点击下图中的“关闭”按钮完成Web服务器的安装。
2.3 添加MVC的解析
4.1.1 IIS5.1,添加MVC的解析:
右击IIS中的虚拟目录选择“属性”-“虚拟目录”-“配置”-“映射”-“添加”,配置如下:
可执行文件:C:\WINDOWS\Microsoft.NET\Framework\v4.0.30196\aspnet_isapi.dll,
扩展名:.*
动作:全部动作
脚本引擎:选中
检查文件是否存在:不选中
点击确定,最后如下图所示:
4.1.2 IIS6.0
设置“Web扩展服务”中的“ASP.NET v4.0.0.30319”为允许,如下图所示:
在IIS中发布网站,创建虚拟目录,ASP.NET版本选择4.0.30196;
添加MVC的解析:
右击IIS中的网站选择“属性”-“主目录”-“配置”-“映射”-“插入”,配置如下:
可执行文件:C:\WINDOWS\Microsoft.NET\Framework\v4.0.30196\aspnet_isapi.dll,
确认文件是否存在:不选中
点击确定,最后如下图所示:
4.1.3 IIS7
设置IIS的“ISAPI和CGI限制”中的“ASP.NET v4.0.0.30319”为允许,如下图所示:
编辑该网站的应用程序池,设置.NET Framework版本为4.0.30196;
3、发布网站
3.1 查看【应用程序池】是否包含ASP.NET v4.0,ASP.NET v4.0 Classic
控制面板(查看方式:小图标)——管理工具(如图2)——Internet信息服务(IIS)管理器(鼠标双击打开,如图3)——应用程序池(鼠标双击打开),
查看是否有图3中绿色框里的ASP.NET v4.0,ASP.NET v4.0 Classic,如果没有,说明Framework没有完全安装,这样种情况下发布的网站是无法访问的。
解决方法:
开始——cmd,在命令管理器里输入以下这样一串字符按Enter键即可:
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe –i
3.2 发布网站
Internet 信息服务(IIS)管理器(鼠标双击打开,如图3)——选择【网站】鼠标右键单击,弹出菜单,选择【添加网站……】弹出图4窗口
编辑该网站的应用程序池,设置.NET Framework版本为4.0.30196;
经过如上操作,网站就发布成功了
双击新建的网站test,选择右侧的【重新启动】,然后点击右侧的【浏览网站】下的【浏览192.168.19.19……】,就可以在浏览器中查看发布的网站了
3.3 关闭防火墙
发布了网站之后别的电脑(局域网)不能访问,ping不通,telnet也不通,原因是服务器开着防火墙,将服务器的防火墙关闭后问题解决。
4、遇到问题及解决方法:
4.1 网站发布后发现静态页面能访问,但是MVC的API Controllers不能访问,原因可能可能是老版本的IIS没有添加对MVC的支持。
右击IIS中的虚拟目录选择“属性”-“虚拟目录”-“配置”-“映射”-“添加”,配置如下:
可执行文件:C:\WINDOWS\Microsoft.NET\Framework\v4.0.30196\aspnet_isapi.dll,
扩展名:.*
动作:全部动作
脚本引擎:选中
检查文件是否存在:不选中
点击确定,最后如下图所示:
4.2应用程序中的服务器错误。
未能加载文件或程序集“ESEarthServer.DAL”或它的某一个依赖项。试图加载格式不正确的程序。
解决:
将应用程序生成为 目标平台:Any CPU;
测试环境是笔记本 win7 64位,把iis应用程序池 --高级设置--启用32位应用程序:true
4.3 能调用api/GetObject,但不能调用api/DEMMeasure
调用api/DEMMeasure的时候,出现错误:无法加载DLL"TerrainAnalyze.dll",找不到指定的模块。
这是因为VS发布的时候漏掉了"TerrainAnalyze.dll",将TerrainAnalyze.dll文件手动拷贝到网站的Bin目录后问题解决。
又出现错误:返回结果是0.0。
原因是测量工具需要指定DEM的路径,目前程序里面写死的路径是E:\ESEarthServer\demgup,此前这里面没有数据所以返回0.0。加入demgup数据后调用,返回成功
4.4 点击左边图层名,右边不显示信息
经测试,读取图层信息成功并成功返回。
发现问题:JS中运行到var str = $.query.get("Parameter");处的时候程序产生错误,判断是调用JQuery库出现问题。
问题解决:由于VS发布的时候漏掉了jquery.params.js文件,所以导致执行$.query.get("Parameter")语句的时候出错,程序立即退出。将jquery.params.js文件手动拷贝到网站的Scripts目录后问题解决。
4.5能调用api/GetObject,但不能调用api/Add
错误信息:xmlhttp.status 500 attempt to write a read-only database
解决办法:找到SQLite“数据库所在的文件夹”,单击右键,属性->安全,为Users用户组添加写入权限。
新错误:Unable to open the database file
解决方法:由于数据库只能读不能写,判断是数据库的权限的问题。通过将数据库的权限改为可读依然没能解决,原因是没有修改数据库所在的文件夹的权限。
注:添加权限可以给users用户添加写权限,也可以新添加"IIS_IUSRS"帐户然后为其添加写权限。(均是对文件夹的操作)
花了两周时间研究MVC的部署,现发布上来抛砖引玉,供大家参考学习,也供我自己学习,望大家多多指教。
由于CSDN发图片太麻烦,图文教材可以进我的资源里下载。