微软在vista和win2008下集成了IIS7,与IIS6相比,有重大升级,看IIS7的十大改进,http://blogs.msdn.com/cqwang/archive/2007/09/10/iis7.aspx
而在2008年发布的MVC正式版中支持IIS6/IIS7。不过对iis6支持的有点变态。
下面是邀月的一次正式部署MVC项目到IIS6的过程。为了项目接近实用,在演示项目中引用了一个Web service(主要根据地区邮编或地区名称来获取天气预报)http://www.webservicex.net/WeatherForecast.asmx?WSDL
第一步: 正式创建一MVC项目
,本项目沿用上个示例,名称为MvcAppDemoFck。项目结构如下图:
第二步:添加web引用
,这个与普通的web service没什么不同,输入地址 http://www.webservicex.net/WeatherForecast.asmx?WSDL
其他默认即可。如上图。
第三步:在Controller下添加新的Controller,名称为WeatherController
,添加代码如下:
并在 "public ActionResult Index{"处右键 Add View,新增一个View名称为GetWeather.aspx,即默认名称
第四步:修改默认的MainContent的内容部分为:
注意,这里一个端口号为50002,是iis的端口,而不是vs2008内置的端口,
看图:
下面开始正式的部署:如果此时在浏览器中输入http://localhost:50002/,会提示404错误。出错原因如下:
This happens because IIS 6 only invokes ASP.NET when it sees a “filename extension” in the URL that’s mapped to aspnet_isapi.dll
(which is a C/C++ ISAPI filter responsible for invoking ASP.NET). Since routing is a .NET IHttpModule
called UrlRoutingModule
, it doesn’t get invoked unless ASP.NET itself gets invoked, which only happens when aspnet_isapi.dll
gets invoked, which only happens when there’s a .aspx
in the URL. So, no .aspx
, no UrlRoutingModule
, hence the 404.
大意是:因为IIS6只对aspx文件才调用 aspnet_isapi.dll进行处理,而在默认的MVC设置里是无路径的,所以会出现404。有人说,为什么vs2008内建的浏览器会支持呢?那正是因为调用了aspnet_isapi.dll
的缘故。所以我们在IIS6中只要通知iis,需要对该网站的地址url进行解析处理即可。
第一种尝试: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"等。展示效果同第二种。
当然,第二种可以用.mvc。同时注意,第二种与第三种必须添加默认Root路径的路由规则,否则会找不到默认主页
出错信息如下:
如果vs2008中启动调试也会在这句出错。
第四种尝试:利用第三方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
按照官方文档,完成配置,需要在iis中设置,而且需要IsapiRewrite4.ini和IsapiRewrite4.dll在同一个目录下,还需要重启iis,希望你看到这些不要崩溃!
安装见官方地址http://cheeso.members.winisp.net/Iirf20Help/html/c76efb95-05ba-4383-8022-7eff3e1174d0.htm
配置http://cheeso.members.winisp.net/Iirf20Help/frames.htm
性能如何,没有测试。
配置成功,截图如下:
第五种尝试:Upgrade to Windows Server 2008 and IIS 7。
据说IIS7对MVC提供了完美的支持。财力短缺,在此略去。
至此,一次mvc项目的部署告一段落。 希望有人能提供更好的方案。
结束语:
MVC最好的支持应该是IIS7(vista/win2008)或者是IIS7.5(Win7/win2008r2),这是产品的生命周期使然。另外在部署过程中js的路径比较特殊,除了使用特殊的
外,最好将js文件放置在Content/js下。而不是默认的Scripts文件。其中出过几次错,特别是在第三方URL组件时更易错。
本文参考的文章:
1、ASP.NET MVC on IIS 6 Walkthrough
(Phil Haack)
2、Deploying ASP.NET MVC to IIS 6
(Steve Sanderson)
3、JQuery AJAX with ASP.NET MVC
(
Farooq Kaiser)CodeProject
4、ASP.NET MVC Framework体验(5):路径选择(URL Routing)
(TerryLee)
5、重提URL Rewrite(2):使用已有组件进行URL Rewrite
(JeffreyZhao)
6、Asp.net MVC项目的部署(一):IIS以及Asp.net与IIS相关的部分
(xuefly)
7、Using ASP.NET MVC with Different Versions of IIS
(MVC官网)
8、ASP.NET MVC URL Routing 学习
(QLeelulu)
9、ASP.NET MVC 入门3、Routing
(QLeelulu)
助人等于自助! 3w@live.cn
分享到:
相关推荐
ASP.NET Core MVC 项目在IIS中部署,按照压缩文件中的说明文件部署即可,按照压缩文件中的说明文件部署即可。。
【ASP.NET编程知识】把ASP.NET MVC项目部署到本地IIS上的完整步骤.docx
asp.net MVC3程序在IIS6.0服务器上的部署 MVC3 IIS6.0 部署
详细的iis部署到发布,保姆级教学!!!
本文主要介绍在IIS5.1、IIS6.0、IIS7.5中安装配置MVC 3的具体办法!
介绍在iis中部署asp.net mvc网站的详细过程以及可能会出现的问题,图文并茂,经过实际调试通过。
关于Asp.net MVC 开发的网站部署问题
最近在做一个MVC 3的项目,在部署服务器时破费了一番功夫,特将过程整理下来,希望可以帮到大家! 本文主要介绍在IIS5.1、IIS6.0、IIS7.5中安装配置MVC 3的具体办法! IIS5.1 1. 安装Microsoft .net FrameWork ...
IIS部署mvc需要的dll 如果有缺少的.贴过去就行 试过了,可以用.
您可能感兴趣的文章:值得分享的IIS部署网站详细步骤在IIS上部署ASP.NET Core项目的图文方法有了SSL证书,如何在IIS环境下部署httpswin2008 IIS7无后缀URL部署问题 MVC4 MVC URL映射windows2003 IIS6 部署MVC3和MVC4...
文档是日文系统下完成的,仅仅通过文档中的图片,大家都能看的懂的,希望能够给大家带来帮助。 文档中主要包括如下内容: 1、环境要求 ... ... 3、通过ddl脚本创建数据库及用户,并分配用户信息。...5、mvc2站点的部署。
部署mvc3项目在iis6上
超详细的截图说明,一步一步教你在windows 2003上(IIS6.0)部署MVC 2 的网站。
文档是日文系统下完成的,仅仅通过文档中的图片,大家都能看的懂的,希望能够给大家带来帮助。 文档中主要包括如下内容: 1、环境要求 ... ...3、通过ddl脚本创建数据库及用户,并分配用户信息。...5、mvc2站点的部署。
安装ASP.NET MVC 3; 先装AspNetMVC3ToolsUpdateSetup.exe 后装 AspNetMVC3ToolsUpdateSetup_CHS.exe
最近会经常修改一些网站前端的内容,为了方便跟UI和产品交流,需要将自己修改过的页面及时发布到测试机或者...下面这篇文章主要给大家介绍了关于如何把ASP.NET MVC项目部署到本地IIS上的相关资料,需要的朋友可以参考下
Asp.net+Mvc+NGinx+IIS分布式部署和负载平衡实例图解.在IIS中创建四个相同的网站,浏览器访问同一个地址,通过NGinx转到不同的IIS网站。https://mp.csdn.net/postedit/81177460
Asp.net+Mvc+NGinx+IIS分布式部署和负载平衡详细的步骤讲解和截图
给自己也备个份,iis6.0下部署mvc项目的步骤
ASP.NET MVC从一开始的设计思路就与Struts不同,它的映射是利用路由配置而非xml,从而大大降低了开发复杂度,并且比Struts要更直观,更容易上手。可是,这并不表明ASP.NET MVC就是尽善尽美的。以下是MVC的一个项目...