#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 请求的的更多相关文章

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

    每次服务器接受到请求,都要先经IIS处理.这不是一篇描述ASP.NE生命周期的文章,仅仅是关于IIS操作的.在我们开始之前,先了解这些会有助于对全文的理解,同时欢迎反馈和建议. 什么是Web Serv ...

  2. ASP.NET Core应用针对静态文件请求的处理[3]: StaticFileMiddleware中间件如何处理针对文件请求

    我们通过<以Web的形式发布静态文件>和<条件请求与区间请求>中的实例演示,以及上面针对条件请求和区间请求的介绍,从提供的功能和特性的角度对这个名为StaticFileMidd ...

  3. 【续集】在 IIS 中部署 ASP.NET 5 应用程序遭遇的问题

    dudu 的一篇博文:在 IIS 中部署 ASP.NET 5 应用程序遭遇的问题 针对 IIS 部署 ASP.NET 5 应用程序的问题,在上面博文中主要采用两种方式尝试: VS2015 的 Publ ...

  4. 【深入ASP.NET原理系列】--ASP.NET请求管道、应用程序生命周期、整体运行机制

    微软的程序设计和相应的IDE做的很棒,让人很快就能有生产力..NET上手容易,生产力很高,但对于一个不是那么勤奋的人,他很可能就不再进步了,没有想深入下去的动力,他不用去理解整个框架和环境是怎么执行的 ...

  5. StaticFileMiddleware中间件如何处理针对文件请求

    StaticFileMiddleware中间件如何处理针对文件请求 我们通过<以Web的形式发布静态文件>和<条件请求与区间请求>中的实例演示,以及上面针对条件请求和区间请求的 ...

  6. 在不同版本的 IIS 上使用 ASP.NET MVC

    ASP.NET MVC Framework 依赖于 URL 路由.为了利用 URL 路由,可能不得不在 Web 服务器上执行额外的配置步骤.这些步骤取决于 Internet Information S ...

  7. ASP.NET 未被授权访问所请求的资源。请考虑授予 ASP.NET 请求标识访问此资源的权限

    开发了一个导入TXT文件的功能,执行过程中出错.提示:.....ASP.NET 未被授权访问所请求的资源.请考虑授予 ASP.NET 请求标识访问此资源的权限.ASP.NET 有一个在应用程序没有模拟 ...

  8. 不同版本的 IIS 中使用 ASP.NET MVC(C#)【转】

    由微软 ASP.NET 团队|2008 年 8 月 19 日 推特 在本教程中,您将学习在不同版本的 Internet Information Services 中如何使用 ASP.NET MVC 和 ...

  9. asp.net请求响应模型原理随记回顾

    asp.net请求响应模型原理随记回顾: 根据一崇敬的讲师总结:(会存在些错误,大家可以做参考) 1.-当在浏览器输入url后,客户端会将请求根据http协议封装成为http请求报文.并通过主sock ...

随机推荐

  1. Golang Email

    Backup Code I dont have chinese inputmethod now ( what the fuck about Linux KDE envirnment !) , so j ...

  2. 拟物设计和Angular的实现 - Material Design

    Material Design是Google最新发布的跨平台统一视觉设计语言.直接翻译是物质设计,但是我更倾向于使用"拟物设计"更为准确. 据谷歌介绍,Material Desig ...

  3. .Net Core Web应用发布至IIS后报“An error occurred while starting the application”错误

    An error occurred while starting the application. .NET Core X64 v4.1.1.0    |   Microsoft.AspNetCore ...

  4. C# 简述Action与function

    Action 与 Func是.NET类库中增加的内置委托,以便更加简洁方便的使用委托. 最初使用委托时,均需要先定义委托类型,然后定义一个符合委托类型签名的函数,在调用前,需声明并创建委托对象,将指定 ...

  5. 【转】「Chris Richardson 微服务系列」微服务架构的优势与不足

    Posted on 2016年5月4日 编者的话|本文来自 Nginx 官方博客,是微服务系列文章的第一篇,主要探讨了传统的单体式应用的不足,以及微服务架构的优势与挑战. 作者介绍:Chris Ric ...

  6. js判断是否手机自动跳转移动端

    写法一: {literal} <script> //判断是否手机自动跳转 var browser={versions:function(){var u=navigator.userAgen ...

  7. 16_python_面向对象

    一.面向对象和面向过程的区别          1.面向对象:一切以对象为中心.有相同属性和动作的结合体叫做对           优点:易维护.易复用.易扩展,由于面向对象有封装.继承.多态性的特性 ...

  8. vue 路由传参的三种基本模式

    路由是连接各个页面的桥梁,而参数在其中扮演者异常重要的角色,在一定意义上,决定着两座桥梁是否能够连接成功. 在vue路由中,支持3中传参方式. 场景,点击父组件的li元素跳转到子组件中,并携带参数,便 ...

  9. EF6使用Mysql,踏过的那些坑

    在vs2013中使用mysql连接entityFramework经常会遇到这个问题:您的项目引用了最新实体框架:但是,找不到数据连接所需的与版本兼容的实体框架数据提供程序.请退出此向导,安装兼容提供程 ...

  10. Swift 里 Set(四)Testing for Membership

    即contains操作 /// - Parameter member: An element to look for in the set. /// - Returns: `true` if `mem ...