ASP.NET MVC3 系列教程 - 部署你的WEB应用到IIS 6.0(转http://www.cnblogs.com/highend/archive/2011/09/12/aspnet_mvc3_deploy_to_iis6.html)

Coordinator
Nov 28, 2011 at 7:51 AM

I:ASP.NET MVC3 部署的前期工作

1.确认部署的服务器操作系统环境

首先我们确认服务器的操作系统版本
可以从系统命令行工具里输入: systeminfo 获取相关操作系统信息例如
image
然后再确认IIS版本信息 -> 打开IIS管理工具即可
image
接着确认.NET Framework的版本
可以在系统命令行工具执行:
cd /d %windir%\Microsoft.NET\Framework
dir \O
image 

2.选择部署方案

部署方案目前就个人而言,将归纳为 3 种方案
A:带源代码文件的部署方案(仅适用于Web Site)
B:不带源代码文件的部署方案(适用于Web Site/Web Application)
C:不带源代码文件 并 提前经过 ASP.NET预编译 的部署方案(适用于Web Site/Web Application)

3.认识Temporary ASP.NET Files目录

我不清楚在座的读者有多少人认识这个目录,所以在此我还是简单地提及一下,篇幅不会很长,即使已经了解这个目录的读者也可以顺便看看回忆回忆巩固下基础也可!
它的位置位于C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files用于存放经ASP.NET引擎编译过后的页面程序集文件.(注意:v4.0.30319为.NET版本号,具体的请根据实际情况去作相应的调整!)
image
上图代码一个普通的页面代码.然后交由ASP.NET引擎处理后变成下图的程序集文件
image

4.自定义Temporary ASP.NET Files目录位置

很简单,只需修改一下web.config的配置就可以了

<system.web>
  <compilation debug="true" targetFramework="4.0" tempDirectory="e:\xxx\">
    <assemblies>
      <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    </assemblies>
  </compilation>
  <!-- .... -->
</system.web>

image

II:将ASP.NET MVC3的应用部署到IIS 6.0

1.IIS 6.0的相关设置

其实很简单不需要像网上说的什么.mvc后缀设置映射处理程序什么的.
确保IIS 6.0能处理ASP.NET 4.0
image
然后在为具体的站点的ASP.NET版本设置为ASP.NET 4.0
image
接着设置IIS为直接走ASP.NET ISAPI
image
接着设置应用程序扩展影射
image
最后
image

2.在负载均衡下记得为每一台Web Server设置同一个MachineKey,否则将无法使视图状态正常工作.
image
本文完..祝各位中秋快乐
预编译工具, 预编译后合并工具

作者的文章帮助很大
声明: 本文版权归作者和博客园共有,转载必须保留此段声明。

去51cto博客大赛投我一票

Coordinator
Nov 28, 2011 at 8:49 AM

Use a wildcard mapping for aspnet_isapi.dll,为aspnet_isapi.dll启用通配符映射。这个翻译很别扭。^_^

 

iis-网站-属性-主目录-配置-映射-插入–(注意不是添加扩展名),可执行文件名一般为C:\WINDOWS\Microsoft.NET \Framework\v2.0.50727\aspnet_isapi.dll。 去掉"确认文件是否存在"的勾,即不选。

OK! 再打开浏览器, http://localhost:50002/,似乎一切都很美好!!但这就等于告诉IIS,每一次的请求,都要通过aspnet_isapi.dll,而无论是否是aspx文件。这不是我们想要的。

第二种尝试:Put .aspx in all your route entries’ URL patterns。在URL格式中设置.aspx路由入口,即在Global.asax.cs文件的RegisterRoutes方法中修改默认的路由规则为

routes.MapRoute("Default", "{controller}.aspx/{action}/{id}", new { controller = "Home", action = "Index", id = "" });
这样一来,这样相当于欺骗iis6,告诉IIS6 ,我是aspx文件,你处理一下我吧。

这样处理的结果就是地址栏变成了 http://localhost:50002/Home.aspx/About或http://localhost:50002/Weather.aspx,但浏览一朷正常。就是地址太恶心了些。

第三种尝试:Use a custom filename extension in all your URL patterns,在所有的url规则中添加一个可定制的扩展名如mvc等。

  与第一种非常类似。iis-网站-属性-主目录-配置-映射-添加–(注意不是插入),可执行文件名一般为C:\WINDOWS \Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll,扩展名为.mvc,动作限制为 “GET,HEAD,POST,DEBUG",同样 去掉"确认文件是否存在"的勾,即不选。因为这些文件并不是真正存在的,只不过为了欺骗可怜的IIS6。其实与第二种的效果类似,只是可以定制后缀名,如".org"等。展示效果同第二种。

第四种尝试:利用第三方URL组件。

1、发现原来用的ISAPI_Rewrite不能在MVC环境正常使用。可能版本过低,是1.3Full。

2、老赵推荐使用IIRF(Ionics Isapi Rewrite Filter)开源,地址为: http://iirf.codeplex.com/

官方提供了MVC的匹配规则: http://cheeso.members.winisp.net/Iirf20Help/html/1ccbf1ec-0984-49d9-9ab0-63eab3ff9c63.htm