MVC — 初步理解IIS工作流程

声明:本文只是自己的总结和积累。IIS7.x

目录

  • IIS流程及组成部分
  • ASP.NET流程及组成部分
  • IIS与ASP.NET  MVC

一、IIS流程及组成部分 

  

 1、Http.SYS:负责监听HTTP请求(它不属于IIS范畴,但是和IIS联系紧密)

  Http.SYS和IIS是相互独立的,但是之间又是密不可分的。Http.SYS是一个运行在内核模式下的一个网络驱动,它归属于TCP/IP网络子系统的一部分,且是运行在TCP/IP之上。它负责着来自网络HTTP请求的监听和过滤。静态地址请求会直接返回到客户端,动态请求会进入下个流程。

  高效:它作为网络驱动持续运行,持续监听过滤请求,对请求做出快速的响应。对于请求频繁的资源,会将返回内容缓存在内核模式下,后续的请求会从缓存中返回内容,这样就避免了用户模式和内核模式的频繁切换。

   稳定:它独立于IIS运行在内核模式下的网络驱动程序,不需要执行用户程序,也不会受到Web进程和IIS进程的影响。

 2、SvcHost.exe :接收Http请求、配置管理、工作进程管理

  W3SVC(3W公共服务—World Wide Web Publishing Service): 接收Http请求

  WAS(Windows进程激活服务—Windows Process Activation Service):配置管理、工作进程管理

      其中,WAS就可以接收处理HTTP请求和非HTTP请求。WAS包含一组非HTTP请求监听器适配接口,可以接收监听器监听的非HTTP请求。其实W3SVC充当了HTTP请求监听器适配器。

  WAS通过请求后缀名与Web应用映射关系,创建工作者进程(或者将请求分发给对应建好的工作者进程),在工作者进程中加载ISAPI(互联网服务器应用程序接口—Internet Server Application Programe Interface)

  ISAPI应用程序实质是一个接口,一个IIS与.NET的桥梁入口,ISAPI维护着很多的桥梁(.dll),例如加载ASP.NET应用的Aspnet_ispai.dll。

  

   在穿过桥梁Aspnet_ispai.dll之后,随之进入ASP.NET的地界了,随后的CLR的加载,AppDomain创建、Web Application的初始化等等。

 

二、ASP.NET流程及组成部分

    

  进入到ASP.NET应用,加载CLR,创建AppDomain, HttpApplication的初始化。接下来穿过一串Module,这些Module里可能实现了当请求进入程序之前的时候出发一些操作或者当请求完成时出发的一些操作,期间会经过Handler,来真正相应我们所写的后台代码。请求—>Module(请求进入前触发的操作)—> Handler(我们的aspx页面的后台代码继承自Page,Page继承IHttpHandler)—>Module(请求结束后触发的操作)

 

三、IIS与ASP.NET  MVC

  

  客户端请求 —> 监听器监听 —> HTTP请求接收(W3SVC)或者 WAS接收到非HTTP请求 —> 对应映射关系并创建工作者进程—> 加载ISAPI—>        

  加载相应的 XXX_ispai.dll —>进入ASP.NET应用—> 加载CLR —> 初始化我们的应用程序  —>一系列 Module操作—>对应Handler的加载执行

    ASP.NET中的Module和Handler拥有很高的扩展性。MVC的就是扩展了Module和Handler。在请求进入前,触发Moudle,对请求进行拦截,分析其controller和action,以及其它相关的上下文信息,然后调用扩展了IHttPHandler接口的MvcHandler,进而进入到我们所对应的具体后台代码。

  

  

转载于:https://www.cnblogs.com/sunchong/p/4102815.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/432157.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

卷积积分这样学!

卷积积分是一种数学运算,那么既然是数学运算,那么就得有数学的特性——定义、性质、定理。 本文将从卷积积分的理论、案例、求解方法、知识图谱四方面介绍卷积积分! 一、【理论】卷积积分的理论 卷积积分定义: 卷积图解01 卷积…

Canvas应用绚烂效果-creatjs实现

js文件var content;//画布var stage;//舞台var spriteSheet;//精灵列表类var sprite;//精灵window.οnlοadfunction(){ //获取画布 contentdocument.getElementById_x_x_x_x_x_x("canvas"); //画布上创建舞台 stagenew createjs.Stage(content); //舞…

世界地图并不是世界的真实样貌!甚至误差非常大

现在所用的世界地图并不是世界的真实样貌,甚至误差大的离谱。 地球属于三维球体,想完整地表现到二维平面上是不可能的,必须牺牲一些真实属性。因为三维降到二维肯定存在扭曲失真,这是维度差异所决定的,不可避免。 我们…

error MSB6006: cmd.exe exited with code 3

利用vs2012和qt5.5.1,在编译例子时发生如下错误: C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppCommon.targets(172,5): error MSB6006: “cmd.exe”已退出,代码为 3。 图片如下: 解决办法如下&#x…

OSGI(面向Java的动态模型系统)

http://baike.baidu.com/subview/362847/6280632.htm?fraladdin 转载于:https://www.cnblogs.com/suifengbingzhu/p/4104109.html

JQuery方法

1、replace var str "I am a man"; str.replace(a,b); 说明:jquery的replace()函数默认替换第一项; var re new RegExp(a,g); str.replace(re,b); 说明:RegExp是正则表达式对象, g表示替换全部 2、json与对象的转换 v…

数学天才用5万字让你读懂:微积分!

前面接连发了三篇麦克斯韦方程组的文章(积分篇、微分篇和电磁波篇),从理论上来说,讲麦克斯韦方程组不讲微积分是不行的,因为人家本来就是一组积分方程和一组微分方程。 但是,为了让更多人,尤其是…

指定一个actor对pawn不可见

1. 把一个staticmesh作成一个actor 2. 给actor添加一个tag 3. 在pawn的beginPlay里面查找这个actor,并设置actor的owner为pawn,然后调用set owner no see

oracle中DECODE与CASE的用法区别

对于CASE与DECODE其实并没有太多的区别,他们都是用来实现逻辑判断。Oracle的DECODE函数功能很强,灵活运用的话可以避免多次扫描,从而提高查询的性能。而CASE是9i以后提供的语法,这个语法更加的灵活,提供了IF THEN ELSE…

error C4668: 没有将“_WIN32_WINNT_WIN10_TH2”定义为预处理器宏,用“0”替换“#if/#elif”

一般为Windows中的宏和UE4冲突所致,需要用如下头文件包裹冲突的头文件: #include "Windows/AllowWindowsPlatformTypes.h" #include "Windows/PreWindowsApi.h" #include "冲突的头文件" #include "Windows/PostWi…

Delphi XE7实现的任意位置弹出菜单

Delphi XE7中目前还没有弹出菜单组件,这个弹出菜单应用很普遍,在JAVA开发的安卓程序中很简单就可以用上了,应该说是一个标准控件。看了一些例子,但是都不能满足我想在任意位置弹出菜单需求,于是自己在网上找了一个例子…

计算曲线的长度

若一条平面曲线可表达成标准方程 那么它的长度就是: 其中a、b为x的上下限。 若平面曲线可表达成参数方程 那么它的长度就是:

MATLAB 求曲线长度

1. 求曲线长度积分公式 2. 已知曲线方程 3. 已知系数,曲线方程为 y 0.0001 * x 0.0005 * x 20 4. 已知曲线的x的起点和终点 -90.78 ,90.78 5. matlab中定义曲线方程 >> syms x; >> y 20 0.0005 * x ^ 2 0.0001 * x ^ 3; 6. matlab中…

C++调用matlab dll

1. 编写matlab函数 2. 命令行输入 mex -setup 选择 mex -setup C 3. 命令行输入 mbuild -setup 选择 mex -setup C -client MBUILD 4. 命令行输入 mcc -W cpplib:add -T link:lib add.m -C 第一个add为生成的dll名称,第二个add为m文件名称,m文…

java方法使用

1 在方法中可以调用同一个类中的方法和属性,但是不能定义方法。system.out语句只能在方法中 2 方法重载:(1)同一个类中 (2)方法名相同 (3)参数列表的类型不同或者个数不同 代码&am…

rapidxml在qt linux(gcc)下写xml文件出错

在linux(gcc)下使用qt写入xml出错,代码如下: 错误如图:这里写图片描述 在网上找了好久没有找到答案,最后在http://stackoverflow.com/questions/14113923/rapidxml-print-header-has-undefined-methods找到…

UE4 插件大坑

正常如果在工程中创建C类,UE4都会自动给类前面添加一个“工程名_API”的宏,但是插件中的C类不会添加。 这样如果在主工程C中调用插件中的C类就会报链接错误,因此需要自己手动添加“插件名_API”这个宏。

MFC工具栏增加EditBox和Button

1. 在资源视图中增加EditBox, Button控件,ID分别为ID_EDIT_SEED, ID_BTN_SEED 2. 在CMainFrame中增加成员变量 CMFCToolBarEditBoxButton *m_editSeed; CMFCToolBarButton *m_btnSeed; 3. 在CMainFrame::OnCreate中创建控件 m_editSeed new CMFCTo…