IIS 是如何处理 ASP.NET 请求的
#main{
width:1250px;
}
#mainContent{
width:915px
}
img#imgTop{
max-width:850px;
}
Web 服务器 VS Web 应用程序
在了解 IIS 如何处理 ASP.NET 请求之前,我们必须要清楚 Web 服务和 Web 应用程序之间的界限。Web 服务器与 Web 应用程序之间的关系,就像 操作系统 与 普通桌面应用程序之间的关系一样 —— 一个提供了运行环境,一个提供实际的业务功能实现。简短一点说,一个是宿主 Host ,一个是应用程序 Application。操作系统能够为各种各样的应用程序提供运行环境,而 Web 服务器是构建于操作系统之上的、具有针对性的应用程序宿主(针对 Web 应用程序),就像 Windows 服务一样。没错,如果你对 Windows 服务的了解多过 Web 服务器,那么使用类比法通过 Windows 服务来了解 Web 服务器是个不错的选择(事实上用 Web服务 替代 Web服务器来表述可能会更合理一点,但这样就很容易将 Web服务 与 .NET Web Service 技术搞混)。
IIS(Internet Information Services)
在中文操作系统中,IIS 被称为 互联网信息服务 —— 这是 Microsoft 公司提供的运行于 Windows 操作系统之上的 Web 服务器,它的功能绝不只是能处理 ASP.NET 请求。但本文要尝试讲明的是 IIS 如何处理 ASP.NET 请求,所以,我们可以假设“IIS就是为 ASP.NET 而生的”。
IIS 如何处理 ASP.NET 请求
作为 Web 服务器,IIS 的主要工作是接收请求并通过Web管理服务(Web Admin Services,WAS)将请求分发给不同的应用程序池。
应用程序池接收到请求后,根据当前运行状况将请求投放给某个工作进程(w3wp.exe),工作进程会依据请求 url 的相关特性(比如后缀 aspx)选择和加载特定的 ISAPI(Internet Server Application Programming Interface,网络服务应用编程接口)。
ASP.NET 对应的 ISAPI 为 aspnet_isapi.dll, 它将构造一个 HttpRuntime 作为应用程序入口,从这里开始,请求将会来回经过HttpApplication 中的一序列 HttpModule 和 HttpHandler,然后做出响应。
aspnet_isapi.dll
.NET 程序员应该都知道,想要 ASP.NET 正常运行,必须安装 .NET Framework。但有时候明明已经安装了 .NET Framework,部署在 IIS 上的网站却怎么也不能正常访问,然后在网上折腾捣鼓,终于在运行 aspnet_regiis 并设置应用程序池的 .NET Framework 版本之后就可以正常访问了。 没错,运行 aspnet_regiis 的目的是为了 将相应版本的 .NET Framework 注册到 IIS ,如果你是先安装 IIS ,后装 .NET Framework, 就无需那么复杂 —— .NET Framework 会自动注册。
.NET Framework 注册到 IIS 时,就会给 IIS 添加相应的 ISAPI —— aspnet_isapi.dll。
IIS 如何知道哪个请求该分发给哪个应用程序池
IIS 内核模块(Kernel Mode)包含一个 HTTP.SYS 文件。
向 IIS 添加一个应用程序池的同时会生成一个对应的标识ID,并被记录到 HTTP.SYS(事实上记录的是 url 与 应用程序池之间的对应关系)。
任何来自客户端的 HTTP 请求都将首先触发 HTTP.SYS 。事实上 HTTP.SYS 本身不会执行任何代码,它仅仅是监听客户端的 HTTP 请求。HTTP 请求包含了 Web 站点的主机(或 IP)、端口和资源路径信息,即 url —— 根据映射,IIS 自然就知道如何分发请求给应用程序池了。
IIS 是如何处理 ASP.NET 请求的的更多相关文章
- IIS是如何处理ASP.NET请求的
每次服务器接受到请求,都要先经IIS处理.这不是一篇描述ASP.NE生命周期的文章,仅仅是关于IIS操作的.在我们开始之前,先了解这些会有助于对全文的理解,同时欢迎反馈和建议. 什么是Web Serv ...
- ASP.NET Core应用针对静态文件请求的处理[3]: StaticFileMiddleware中间件如何处理针对文件请求
我们通过<以Web的形式发布静态文件>和<条件请求与区间请求>中的实例演示,以及上面针对条件请求和区间请求的介绍,从提供的功能和特性的角度对这个名为StaticFileMidd ...
- 【续集】在 IIS 中部署 ASP.NET 5 应用程序遭遇的问题
dudu 的一篇博文:在 IIS 中部署 ASP.NET 5 应用程序遭遇的问题 针对 IIS 部署 ASP.NET 5 应用程序的问题,在上面博文中主要采用两种方式尝试: VS2015 的 Publ ...
- 【深入ASP.NET原理系列】--ASP.NET请求管道、应用程序生命周期、整体运行机制
微软的程序设计和相应的IDE做的很棒,让人很快就能有生产力..NET上手容易,生产力很高,但对于一个不是那么勤奋的人,他很可能就不再进步了,没有想深入下去的动力,他不用去理解整个框架和环境是怎么执行的 ...
- StaticFileMiddleware中间件如何处理针对文件请求
StaticFileMiddleware中间件如何处理针对文件请求 我们通过<以Web的形式发布静态文件>和<条件请求与区间请求>中的实例演示,以及上面针对条件请求和区间请求的 ...
- 在不同版本的 IIS 上使用 ASP.NET MVC
ASP.NET MVC Framework 依赖于 URL 路由.为了利用 URL 路由,可能不得不在 Web 服务器上执行额外的配置步骤.这些步骤取决于 Internet Information S ...
- ASP.NET 未被授权访问所请求的资源。请考虑授予 ASP.NET 请求标识访问此资源的权限
开发了一个导入TXT文件的功能,执行过程中出错.提示:.....ASP.NET 未被授权访问所请求的资源.请考虑授予 ASP.NET 请求标识访问此资源的权限.ASP.NET 有一个在应用程序没有模拟 ...
- 不同版本的 IIS 中使用 ASP.NET MVC(C#)【转】
由微软 ASP.NET 团队|2008 年 8 月 19 日 推特 在本教程中,您将学习在不同版本的 Internet Information Services 中如何使用 ASP.NET MVC 和 ...
- asp.net请求响应模型原理随记回顾
asp.net请求响应模型原理随记回顾: 根据一崇敬的讲师总结:(会存在些错误,大家可以做参考) 1.-当在浏览器输入url后,客户端会将请求根据http协议封装成为http请求报文.并通过主sock ...
随机推荐
- DXP 板层
一)DXP-设置板层(D+K )在PCB编辑 Design->Layer Stack Manager(层管理) 1)快捷命令 D + K 进入么多层置管理器 2.鼠标右键 TopLayer- ...
- [mysqli_escape]mysql转义两次
// mysqli_real_escape_string // 第一次转义的结果 SELECT * FROM example WHERE f_email='example@exampl.com' an ...
- IIS日志存入数据库之二:ETW
在上一篇文章<IIS日志存入数据库之一:ODBC>中,我提到了ODBC方式保存的缺点,即:无法保存响应时间以及接收和响应的字节数. 如果一定要获取响应时间以及接收和响应的字节数的话,就要另 ...
- 基于opencv3.0下的人脸检测和检测部分的高斯模糊处理
如题 这里将任务分解为三大部分: 1.录播放视频 2.人脸检测 3.部分高斯模糊 其中重点放在人脸检测和部分高斯模糊上 1.录播放视频(以opencv中的VideoCapture类进行实现) 首先罗列 ...
- 【转】IE浏览器CSS BUG集锦
Internet Explorer CSS Bugs Overview Internet Explorer is famous for not supporting many of CSS prope ...
- node.js实现WebSocket
最近在学习“HTML5游戏开发实战”,其中第8章内容是使用WebSocket来构建多人游戏---<你画我猜>.然而在实现过程中,却一直出错: 客户端请求时,服务器端会报错并终止: 而浏览器 ...
- Python random模块 获取随机数的使用
random.randomrandom.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0 random.uniformrandom.uniform(a, b),用 ...
- Linux启动流程与模块管理(15)
系统的启动其实是一项非常复杂的过程,因为内核得要检测硬件并加载适当的驱动程序,接下来则必须要调用程序来准备好系统运行的环境,以让用户能够顺利的操作整台主机系统,如果你能够理解系统启动的原理,那么将有助 ...
- 网页关闭(解决window.close在火狐下不兼容问题)
熟悉前端的都知道,火狐默认状态非window.open的页面window.close是无效的 网上有很多人说,在火狐的地址栏输入:about:config然后找到dom.allow_scripts_t ...
- Dubbo启动时服务检查
所谓启动时服务检查是指Dubbo在启动的时候会检查当前引用的服务是否可用,不可用会抛出异常,阻止程序的初始化,以便能在上线前快速的找到问题,默认的情况下check=true 通过设置check=fal ...