ASP.NET + MVC 网站部署到IIS 7.0 环境的云服务器遇到的问题
issue1:远程连接管理失败
防火墙拦截,关闭防火墙或在防火墙设置里允许通行。
设置流程:控制面板->Windows防火墙->允许应用或功能通过Windows防火墙:找到远程桌面打上勾。同理FTP无法上传也有可能是防火墙拦截,同时设置允许。
issue2: .NET环境安装失败
全新的Windows Server服务器没有设置虚拟内存导致.NET环境安装失败。
设置流程:我的电脑->属性->高级系统设置->高级:性能设置->设置->高级:虚拟内存更改。
微软建议虚拟内存初始大小设置为物理内存的1倍最大值为物理内存的2倍到3倍。
issue3:VisualStudio自带发布工具发布设置
在解决方案管理器里右键要发布的网站(解决方案下的网站项目右键),生成网站,生成完成后右键发布Web应用。
FTP 发布设置:配置文件命名随意;连接:发布方法选择 FTP ,输入服务器 IP ,站点路径,用户名,密码,目标 URL (可不填),就可以直接发布了。如果设置没有错误的话,发布失败可能是 issue 1 的问题。
Web Deploy 发布设置:配置文件命名随意;连接:发布方法选择Web Deploy ;服务器填写自己服务器的 IP ;站点名称填写要发布的网站名称;用户名,密码,目标 URL可不填。
验证连接通过可以直接点击发布。
issue 4: Web Deploy 发布失败
1 若服务器未安装 Web Deploy
远程连接服务器,在IIS右侧**"获取新的Web平台组件"下载安装 web platform installer,安装完毕后打开搜索:Web Deploy,安装 WEB DEPLOY 3.5。(注意 Windows Server的IE 安全项默认关闭下载的,需要打开才能下载。)**
检查管理服务中 Web Management Service 和 Web 部署代理服务 是否启动。
防火墙 Web Deploy是否允许连接,若没有Web Deploy这一项需要手动添加防火墙入站规则:允许8172端口。
2 Web Deploy 发布 已连接但授权失败
IIS 管理器权限中添加用户,一般不使用Administrator管理员用户 而是使用新建的WDeployAdmin用户,没有的话需要自己手动建立用户。并且确保WDeployAdmin用户有修改文件的权限。
参考Blog为:天空的垃圾场(Google Blog 访问需翻墙)
issue 5:发布成功后访问404 ,403 错误
404可能问题:
1 网站未启动:IIS 管理器里网站启动。
02 默认页面不对: IIS 的默认页面有 Default.aspx,index.html,等,而我的是 index.aspx,需要在默认页添加本地 index.aspx。
3 网站后台代码有错误:发布时配置文件里
<configuration>
<system.web>
<compilation debug="true",targetFramework="4.5" />
</system.web>
</configuration>
403可能问题:
网站的权限不对:IIS管理器里打开网站,点击编辑权限-》安全->编辑权限,或者直接添加Everyone权限。
###issue 6:没有为扩展名“.cshtml”注册的生成提供程序
错误提示以及google,百度搜到的都是在 web.config文件中添加
<compilation debug="true" targetFramework="4.5" >
<buildProviders>
<add extension=".cshtml" type="System.Web.Compilation.PageBuildProvider" />
</buildProviders>
</compilation>
然后出现了issue 7
issue 7:视图必须派生自 ViewPage、ViewPage
google,百度到的是
1.在MVC架构中使用aspx页面,需要在Text.aspx中开头加入如下代码:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
2.把Views下面的web.config文件复制一个到MyCustomView下面,这样错误就没有了
3.直接在视图中加一句指令
@inherits System.Web.Mvc.WebViewPage
这些都是在开发的时候遇到的解决办法,不是部署完访问遇到。
发布之后遇到issue 6 和 issue 7 解决办法:
远程连接服务器,打开IIS管理器,将文件夹 bin 和 Views 转换为应用程序。
猜测原因是ASP.NET MVC 发布只编译 Controller,Models,App_Code 等文件中的 .cs后缀的文件到bin目录下。不编译Views 文件夹。 导致编译后的Controller 访问 Views 文件夹是作为普通文件夹访问。而不是 ASP.NET MVC 注册的视图(Views)文件夹。而转换为应用程序后 Start_up.cs 就可以将 Views 注册为MVC的视图文件夹。
写在最后
服务器配置:阿里云服务器ECS,单核,1G内存,50G硬盘,1Mbps宽带 。IIS 7.0,.NET环境。
开发环境:VisualStudio 2013,ASP.NET + MVC + AJAX + EntityFramework,网页使用Razor引擎。