你的位置:首页 > ASP.net教程

[ASP.net教程]ASP.NET MVC5框架揭秘 学习笔记01


1.自治视图

      在早期(作者也没说明是多早,自己猜吧),我们倾向于将所有与UI相关的操作糅合在一起(现在我身边还有很多人这样做),这些操作包括UI界面的呈现、

用户交互操作的捕捉与响应(UI处理逻辑)、业务流程的执行及对数据的存取等,我们将这种设计模式称为自治视图(AV)。

     自治视图在应用程序的重用性、稳定性和可测试性都存在各种各样的问题,所以我们采用关注点分离(SoC)的原则将可视化界面呈现、UI处理逻辑和业务逻辑

三者分离出来,并采用合理的方式降低三者之间的耦合度。

2.MVC模式

image

  • Model是对应用状态和业务功能的封装,Model接受Controller请求并完成业务处理,在应用状态改变的时候向View发出通知。
  • View提供给最终用户操作最终可视化界面。
  • Controller接受View的操作请求,调用Model处理数据,并对最终用户的操作进行响应。

MVC模式变体之MVP(之前在项目上用过了,这里再次感谢本书的作者,当时是拜读了作者的博客关于MVP的文章后才对MVP模式有深入的理解)。

MVC模式变体之Model 2

     提出的目的:让MVC模式为web应用开发提供原生的支持,是一种源于Java的web应用结构模式。

     Model2交互流程

image

      ASP.NET MVC是根据Model 2模式设计的,通过一个自定义HttpModule(拦截器)对HTTP请求进行拦截解析,通过一个自定义HttpHandler来执行目标

Controller的激活和Action方法的执行。

3.IIS

     在IIS7之前,ASP.NET 是以 IIS ISAPI extension 的方式外加到 IIS,其实包括 ASP 以及 PHP,也都以相同的方式配置(PHP 在 IIS 采用了两种配置方式,除了 IIS ISAPI extension 的方式,也包括了 CGI 的方式,系统管理者能选择 PHP 程序的执行方式),因此客户端对 IIS 的 HTTP 请求会先经由 IIS 处理,然后 IIS 根据要求的内容类型,如果是 HTML 静态网页就由 IIS 自行处理,如果不是,就根据要求的内容类型,分派给各自的 IIS ISAPI extension;如果要求的内容类型是 ASP.NET,就分派给负责处理 ASP.NET 的 IIS ISAPI extension,也就是 aspnet_isapi.dll。下图是这个架构的示意图。

image

       而 IIS 7 完全整合 .NET 之后,架构的处理顺序有了很大的不同(如下图),最主要的原因就是 ASP.NET 从 IIS 插件(ISAPI extension)的角色,进入了 IIS 核心,而且也能以 ASP.NET 模块负责处理 IIS 7 的诸多类型要求。这些 ASP.NET 模块不只能处理 ASP.NET 网页程序,也能处理其他如 ASP 程序、PHP 程序或静态 HTML 网页,也因为 ASP.NET 的诸多功能已经成为 IIS 7 的一部份,因此 ASP 程序、PHP 程序或静态 HTML 网页等类型的要求,也能使用像是Forms认证(Forms Authentication)或输出缓存(Output Cache)等 ASP.NET 2.0 的功能(但须修改 IIS 7 的设定值)。也因为 IIS 7 允许自行以 ASP.NET API 开发并加入模块,因此 ASP.NET 网页开发人员将更容易扩充 IIS 7 和网站应用程序的功能,甚至能自行以 .NET 编写管理 IIS 7 的程序(例如以程控 IIS 7 以建置网站或虚拟目录)。

image

IIS7.0的处理请求的步骤

  1. 当客户端浏览器开始HTTP请求一个web服务器的资源时,HTTP.SYS拦截这个请求。
  2. HTTP.SYS经WWW服务器发送请求发送到WAS。
  3. WAS向配置存储中心请求配置信息(applicationHost.config)。
  4. WWW服务接收到配置信息,配置信息指类似应用程序池配置信息、站点配置信息等。
  5. WWW服务使用配置信息去配置HTTP.SYS处理策略。
  6. 根据请求WAS为Application Pool启动一个进程。
  7. 进程处理请求并返回结果给HTTP.SYS。
  8. 客户端接收到处理请求结果信息。

imageimage

4.ASP.NET 管道

  • HTTP.SYS接收到请求后,如果是第一次访问该web应用,IIS会通过AppDomainFactory为该web应用创建一个应用程序域。随后一个特殊的运行时IsapiRuntime被加载,并接管该HTTP请求。
  • IsapiRuntime首先创建一个IsapiWorkerRequest对象来封装当前的HTTP请求,并将此对象传递给ASP.NET运行时HttpRuntime,至此HTTP请求正式进入ASP.NET管道。
  • HttpRuntime根据IsapiWorkerRequest对象创建HttpContext对象(HTTP请求上下文对象),之后HttpRuntime利用HttpApplicationFactory创建或获取HttpApplication对象(从HttpApplication对象池中获取),HttpApplication负责处理当前的HTTP请求。
  • 在HttpApplication初始化过程中,ASP.NET会根据配置文件加载并初始化注册的HttpModule对象。HttpModule作用是通过注册HttpApplication的相应事件,将所需的操作注入整个HTTP请求的处理流程。
  • 最终完成对HTTP请求的处理实现在HttpHandler中,不同的资源类型对应着不同类型的HttpHandler。

image

imageimage

图:创建ASP.NET环境                                                                                 图:ASP.NET请求的内部对象模型                                        图:不同的HttpHandler处理请求

image

图:请求管道

 

以上笔记部分文字、图示摘自《ASP.NET MVC5 框架揭秘》,如有侵权之处请留言,本人将及时删除!

引用:

IIS 内部运行机制及Asp.Net执行过程详解

http://www.cnblogs.com/SALIN/archive/2012/08/13/2636511.html

.NET (C#) Internals: ASP.NET 应用程序与页面生命周期(意译)

http://www.cnblogs.com/SALIN/archive/2012/08/13/2636516.html

IIS 7.0 的 ASP.NET 应用程序生命周期概述

https://msdn.microsoft.com/zh-cn/library/bb470252(v=vs.100).aspx