问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

IIS是如何处理ASP.NET请求的

发布网友 发布时间:2022-04-21 20:54

我来回答

1个回答

热心网友 时间:2022-04-27 09:44

这不是一篇描述ASP.NE生命周期的文章,仅仅是关于IIS操作的。在我们开始之前,先了解这些会有助于对全文的理解,同时欢迎反馈和建议。 什么是Web Server? 每当我们通过VS运行ASP.NET网站时,VS集成的ASP.NET引擎会响应各种请求,这个引擎的名字叫“WebDev.WebServer.exe”。 当我们配置一个Web程序时,总会涉及到一个词“Web Server”,它的功能便是会响应所有请求。 什么是IIS? IIS(Internet Information Server)是微软Web Server的一种,用来配置ASP.NET站点。IIS拥有自己的ASP.NET处理引擎来处理请求,因此,当一个请求到达时,IIS接收并处理请求,然后返回内容。 请求处理过程 现在,你应能搞清楚Web Server和IIS的区别。现在我们来看一下核心部分。在继续之前,你需要搞清两个概念: 1、工作进程(Worker Process) 2、应用程序池(Application Pool) 工作进程:在IIS中,工作进程(w3wp.exe)运行着ASP.NET应用程序,管理并响应所有的请求,ASP.NET所有的功能都运行在工作进程下,当请求到来时,工作进程会生成Request和Response相关的信息。简而言之,工作进程就是ASP.NET程序的心脏。 应用程序池:应用程序池是工作进程的容器,通常用来隔开不同配置的工作进程。当一个程序出错或进程资源回收时,其他池中的程序不会受到影响。 注:当一个应用程序池包含多个工作进程时,被叫做“Web Garden”。 如果我们看一下IIS 6.0的结构,就会发现,可以把它分成两部分: 1、内核模块(Kernel Mode) 2、用户模块(User Mode) 内核模式是从IIS 6.0被引入的,它包含了一个叫HTTP.SYS的文件,每当请求进来时,会首先触发该文件的响应。 HTTP.SYS文件负责把请求传入相应的应用程序池中。但HTTP.SYS如何知道应传给哪个应用程序池呢?当然不是随机抽取,每当创建一个应用程序池,该池的ID就会生成并在HTTP.SYS文件中注册,因此该文件才能确定将请求往哪传。 以上便是IIS处理请求的第一步。接着,我们来看一下请求如何从HTTP.SYS传入应用程序池。 在IIS的用户模块中,通过Web Admin Services (WAS)从HTTP.SYS接收请求,并传入相应的应用程序池中。 当应用程序池接收到请求,会接着传给工作进程(w3wp.exe),该进程检查来请求的URL后缀以确定加载哪个ISAPI扩展。ASP.NET加载时会附带自己的ISAPI扩展(aspnet_isapi.dll),以便在IIS中映射。 注意:如果先安装了asp.net,然后再安装IIS,就需要通过aspnet_regiis命令来注册ASP.NET中的ISAPI扩展。 一旦工作进程加载了aspnet_isapi.dll, 就会构造一个HttpRuntime类,该类是应用程序的入口,通过ProcessRequest方法处理请求。 一旦这个方法被调用,一个HttpContext的实例就产生了。可通过HTTPContent.Current获取到这个实例,且该实例会在整个生命周期中存活,我们通过它可以获取到一些常用对象,如Request,Response,Session 等。 之后HttpRuntime会通过HttpApplicationFactory类加载一个HttpApplication对象。每一次请求都要穿过一堆HttpMole到达HttpHandler,以便被响应。而这些HttpMole就被配置在HttpApplication中。 有一个概念叫“Http管道”,被叫做管道是因为它包含了一系列的HttpMole,这些HttpMole拦截请求并将其导向相应的HttpHandler。我们也可自定义HttpMole,以便在请求响应之间做点特别的处理。 HttpHandler是“Http管道”的终点。所有请求穿过HttpMole需抵达相应的HttpHandler,然后HttpHandler根据请求资源,产生并输出内容。也正因此,我们请求任何aspx页面才会得到响应的Html内容。 结语 每当请求Web服务器上的某些信息时,该请求首先会到达Http.SYS, 然后Http.SYS将其发送到相应的应用程序池,应用程序池传给工作进程并加载ISAPI扩展,然后HttpRuntime对象会被创建,并通过HttpMole和HttpHandler处理请求。 最后,ASP.NET页面生命周期就开始了。 这只是大致描述IIS处理过程的文章,如果你想进一步了解相应细节,请点击下面链接来进一步学习。 A low-level Look at the ASP.NET Architecture IIS Architecture 本文翻译自:Beginner’s Guide: How IIS Process ASP.NET Request 译后小注: 1、如果在IIS配置完站点却看不到“w3wp.exe”进程,只要用浏览器打开该站其中一个页面,“w3wp.exe”进程就会出现了。 2、为节省时间,直接引用了原图,英文差的,小查一下字典应该没啥问题。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...带显示器的配置单,我是深圳的,用来玩游戏3D游戏, ...价格2500左右,搞开发,玩游戏,看电影,带显示器,求个攻略..._百度知... 预算是2500元,主要是看电影玩3D游戏. 预算是2500元,主要是看电影玩3D游戏 电脑组装配置单,价格2500左右,能玩3D游戏。。。 2500左右的电脑配置。能跑起来3D游戏,看高清电影另外这样的电脑配置怎么... ...台2500左右的电脑,主要用来玩3D游戏(jx3)和看电影。 2500到2800左右的主机配置,主要玩3D游戏,看电影。 联想平板电脑屏幕恢复出厂设置lenovo平板电脑怎样一键还原出厂设置 高重复率论文如何快速修改? 当我在电脑中安装iis时,遇到了无法安装的情况,并提... iis请求筛选怎样不返回错误提示? IIS站点请求有时200,有时500是什么原因? 如何配置IIS接受POST请求 IIS需要不断请求 内存一直上升怎么解决 IIS下同一站点不允许同时提交多个请求吗? 用注销的手机号还能查到微信,能加好友吗 如果微信好友手机没有我的手机号,她能通过微信查到吗? 微信好友资料里没有手机号,怎么用查到手机号? 自己微信加好友来源,一个是手机号搜索,一个是对... 不想微信显示手机号 不是微信好友怎么样才可以看到对方的? 知道没有绑定手机号怎么查是谁申请的 没加微信好友,只知道微信名,能查到吗? 怎么样才能查找回手动删除的微信好友,不记得微信... 上没有手机号码可以查出来吗 微信如何不让别人通过手机号 手机号搜不到对方微信 对方设置不让手机号码查找 微信如何设置不让通过手机号查询到 不想让对方用手机号查我微信 衬衫怎么洗才不会皱 IIS如何在同一个站点上请求多张证书,或更新、更换... IIS无法启动服务器没有及时响应启动或控制请求 怎样洗脸才会不长皱纹? iis 请求出现500 怎么解决 IIS服务HTTP请求出现Error:远程服务器返回了意外响...  windows10安装iis时出现无法完成请求更改... 衬衣怎么洗怎么晒不容易皱? iis错误404.13 请求筛选模块被配置为拒绝超过请求... iis服务器 web请求重复执行 真丝衣服怎么洗不起皱? IIS 服务没有及时响应或控制请求! 什么是IIs asp请求iis服务器刷屏问题 关于IIS的问题 IIS权限问题 我的QQ怎么没有人加好友? qq有人加好友在哪里看 qq上会有人把自己可能认识的人都加上好友吗? 为什么我的QQ会一直有人加我好友