- 浏览: 73487 次
- 性别:
- 来自: 北京
文章分类
最新评论
这种做法,实际上是回答了“如何去做”的问题,却没有回答“为什么可以这样做”的问题。
尽管我很推崇 悉江华 先生的《圣殿祭祀的Asp.Net开发详解》一书,但当我翻看了一下其对角色(Role) 和 用户(Member)的讲解时,我决定跳过去直接读后面的章节。因为我发现他也随了大流,对这部分的讲解停留在“如何去做”的层面上。我相信像悉先生 这样的牛人是不可能不了解底层运作原理的,仅仅是因为那本书原本就已经很厚了吧。
当你按“如何去做”所讲解的内容去开发程序的时候,对于你的用户,你仍是一名程序员;但对于实现了MembershipProvider 和 RoleProvider 抽象类的微软开发人员来说,你已经成了他们的一个用户。
你可能觉得了解这些幕后工作是如何运作的无关紧要,作为程序员的你只要保证开发出的程序可以高效地运行就可以了。然而,在开发过程中,你却发现常常需要使用诸如 HttpContext 这样的类。这个时候,你可曾思考过这些类的构成和类的实体是如何创建的?你可能简单地回答:HttpContext代表当前请求的一个上下文环境。可你又知道IIS 、Framework、Asp.Net 是如何协同工作处理每个Http请求、如何区分不同的请求、IIS、Framework、Asp.Net三者之间的数据如何流动么?
回答上面这些问题,首先需要了解IIS是如何处理页面请求的,这也是理解 Form验证模式和Windows 验证模式 的基础。
Http请求刚刚到达服务器的时候
当服务器接收到一个 Http请求的时候,IIS 首先需要决定如何去处理这个请求(NOTE:服务器处理一个.htm页面和一个.aspx页面肯定是不一样的么)。那IIS依据什么去处理呢?―― 根据文件的后缀名。
服务器获取所请求的页面(NOTE:也可以是文件,比如 jimmy.jpg)的后缀名以后,接下来会在服务器端寻找可以处理这类后缀名的应用程序,如果IIS找不到可以处理此类文件的应用程序,并且这个文件也没有受到服务器端的保护(NOTE:一个受保护的例子就是 App_Code中的文件,一个不受保护的例子就是你的js脚本),那么IIS将直接把这个文件返还给客户端。
能够处理各种后缀名的应用程序,通常被称为 ISAPI 应用程序(NOTE:Internet Server Application Programe Interface,互联网服务器应用程序接口)。虽然这 ISAPI 听上去还挺气派,也算是“应用程序”呢,但仔细看看它的全称就明白了:它实际上只是一个接口,起到一个代理的作用,它的主要工作是映射所请求的页面(文件) 和与此后缀名相对应的实际的处理程序。
让我们更进一步地看一下 ISAPI ,看看它到底是什么样子,请按下面的步骤进行:
- 打开IIS。
- 选择随意一个站点,鼠标右键,“属性”。
- 选择“主目录”选项卡。
- 选择“配置”。
你应该会看到如下的画面:
图1. 应用程序配置
很清楚地就可以看到,所有IIS所能处理,或者叫 ISAPI 所提供代理服务的 文件类型 及其相对应的实际的后台处理程序都在这里清楚地列出来了。
我们找到 .aspx 的应用处理程序,然后点“编辑”,会出现下面的画面:
图2. 编辑.aspx文件的处理程序
一路看到这里,可以看出,所有的.aspx文件实际上都是由 aspnet_isapi.dll 这个程序来处理的,当IIS把对于.aspx页面的请求提交给了aspnet_isapi.dll以后,它就不再关心这个请求随后是如何处理的了。现在我们应该知道:Asp.Net 只是服务器(IIS)的一个组成部分而已,它是一个 ISAPI扩展。
这里需要注意两点:
- 当你修改“限制为”后,可以限制页面(文件)只能以某种特定方式访问
- “确认文件是否存在”是实现 URL 地址映射的关键选项,我以后会专门讲述。
理解宿主环境(Hosting)
从本质上讲,Asp.Net 主要是由一系列的类组成,这些类的主要目的就是将Http请求转变为对客户端的响应。HttpRuntime类是Asp.Net的一个主要入口,它有一个称作 ProcessRequest 的方法,这个方法以一个 HttpWorkerRequest 类作为参数。HttpRuntime 类几乎包含着关于单个 Http请求的所有信息:所请求的文件、服务器端变量、QueryString、Http 头信息 等等。Asp.Net 使用这些信息来加载、运行正确的文件,并且将这个请求转换到输出流中,一般来说,也就是HTML页面。
NOTE:卸载也是为了重新加载),Http请求被分放在相互隔离的应用程序域中。
对于IIS来说,它依赖一个叫做 HTTP.SYS 的内置驱动程序来监听来自外部的 HTTP请求。在操作系统启动的时候,IIS首先在HTTP.SYS中注册自己的虚拟路径。
如果请求的是一个可访问的URL,HTTP.SYS会将这个请求交给 IIS 工作者进程。
每个工作者进程都有一个身份标识 以及 一系列的可选性能参数。
接下来进行的事情就是上一章节讲述的 ISAPI 了。
除了映射文件与其对应的处理程序以外,ISAPI 还需要做一些其他的工作:
- 从HTTP.SYS中获取当前的Httq请求信息,并且将这些信息保存到 HttpWorkerRequest 类中。
- 在相互隔离的应用程序域AppDomain中加载HttpRuntime。
- 调用 HttpRuntime的ProcessRequest方法。
接下来才是程序员通常编写的代码所完成的工作了,然后,IIS 接收返回的数据流,并重新返还给 HTTP.SYS,最后,HTTP.SYS 再将这些数据返回给客户端浏览器。
OK,现在你看到张子阳的空间主页了。
图3.Asp.Net 的宿主环境
理解管道(Pipeline)
在前面两章中,我们在一个相对比较低的层次上讨论了从发出Http请求到看到浏览器输出这转瞬即逝的十分之一秒内IIS和 Framework 所做的事情。但是我们忽略了一个细节:程序员编写的代码是如何在这一过程中衔接的,本章我们就来看看这个问题。
当Http请求进入 Asp.Net Runtime以后,它的管道由托管模块(NOTE:Managed Modules)和处理程序(NOTE:Handlers)组成,并且由管道来处理这个 Http请求。
图4. 理解 Http 管道
我们按编号来看一下这幅图中的数据是如何流动的。
1. HttpRuntime将Http请求转交给 HttpApplication,HttpApplication代表着程序员创建的Web应用程序。HttpApplication创建针对此Http请求的 HttpContext对象,这些对象包含了关于此请求的诸多其他对象,主要是HttpRequest、HttpResponse、HttpSessionState等。这些对象在程序中可以通过Page类或者Context类进行访问。、
2. 接下来Http请求通过一系列Module,这些Module对Http请求具有完全的控制权。这些Module可以做一些执行某个实际工作前的事情。
3. Http请求经过所有的Module之后,它会被HttpHandler处理。在这一步,执行实际的一些操作,通常也就是.aspx页面所完成的业务逻辑。可能你会觉得在创建.aspx页面并没有体会到这一过程,但是,你一定知道,.aspx 页面继承自Page类,我们看一下Page类的签名:
// 代码省略
}
可以看到,Page类实现了IHttpHandler接口,HttpHandler也是Http请求处理的最底层。
4.HttpHandler处理完以后,Http请求再一次回到Module,此时Module可以做一些某个工作已经完成了之后的事情。
如果我们将注意力只集中在Http请求、HttpHandler和HttpModule上,不去考虑HttpContext和HttpApplication,那么图4.可以简化成下面这样:
图5.Http请求在HttpHandler 和 HttpModule 中的流动方向
总结
本文中,我首先概要介绍了这系列文章将要为大家讲述的主题。然后,我提出了部分程序员存在的一个问题:在一个比较高的层次上学习和使用Asp.Net。
随后,我以一个访问我个人空间首页的例子,引出了本文主要讲述的三个内容:
- Http请求刚刚到达时IIS时,IIS 所做的工作。
- Http请求的宿主环境。
- Http管道。
发表评论
-
双鱼座|双鱼座性格分析
2010-10-26 13:07 325一、双鱼座 ... -
天蝎座|天蝎座性格分析
2010-10-26 13:08 233二、天蝎座 代 ... -
天秤座|天秤座性格分析
2010-10-26 13:09 281三、天秤座 代表人物:《银魂》坂田银时 身为 ... -
双子座|双子座性格分析
2010-10-26 13:10 357四、双子 代表人 ... -
水瓶座|水瓶座性格分析
2010-10-26 13:11 289五、水瓶座 代表 ... -
白羊座|白羊座性格分析
2010-10-26 13:12 311六、白羊座 代表人物:《kof》八神庵 之所 ... -
金牛座|金牛座性格分析
2010-10-26 13:13 324七、金牛座 代表 ... -
巨蟹座|巨蟹座性格分析
2010-10-26 13:14 245八、巨蟹座 代表人物:《幽游白书》藏马 阴柔,暖昧 ... -
狮子座|狮子座性格分析
2010-10-26 13:15 363九、狮子座 代表人 ... -
处女座|处女座性格分析
2010-10-26 13:16 246十、处女座 代表人 ... -
射手座|射手座性格分析
2010-10-26 13:18 311十一、射手座 代表人物:《eva》明日香 射手座 ... -
摩羯座|摩羯座性格分析
2010-10-26 13:19 296十二、摩羯座 代表 ... -
城镇职工养老保险关系转移接续办法发布
2010-10-29 10:21 239城镇职工养老保险关系转移接续办法发布 核心提示:国务院办公厅 ... -
财付通集成例子|C#|asp.net|jsp|php
2010-10-30 17:20 439财付通集成例子|C#|asp.net|jsp|php http ... -
吃大蒜 喝咖啡
2010-10-31 00:03 265不知道那个鸟人说了一句话:吃大蒜的和喝咖啡的能谈在一起么? ... -
西联汇款哪里取钱|怎么取钱
2010-10-31 08:16 580目前知道的是 邮局和 ... -
万圣节来源|万圣节起源
2010-10-31 12:55 281万圣夜英文称之“Hallowe ... -
如何提高google Adsense 点击量
2010-11-05 11:12 286Adsense不扣量,的确是 ... -
ICU|重症加强护理病房
2010-11-11 10:37 280ICU是英文Intensive Care Unit 的缩写,意 ... -
一亩多少平方米|多大
2010-11-11 16:28 332一亩等于60平方丈,合666.67平方米, 但1978年到19 ...
相关推荐
### .NET项目在IIS部署(iis5和iis7) #### 一、IIS5.1 部署 ASP.NET 项目 ##### 1.1 安装配置IIS5.1 IIS5.1是Windows XP Professional版自带的Web服务器组件,但在默认情况下并未安装。若要在XP系统上部署ASP...
描述中提到的压缩包可能包含了IIS的安装组件,你可以通过这些文件来补充安装缺失的部分,确保IIS知道如何处理.NET应用程序。在安装过程中,可以手动选择添加.NET相关的IIS角色服务,例如ASP.NET。 最后,按照文档...
.NET 6项目部署到IIS(Internet Information Services)是一个关键的步骤,对于任何希望在Windows服务器上运行.NET应用程序的企业或开发者来说,都是必备技能。IIS是微软提供的一款强大的Web服务器,可以承载多种...
### .NET与IIS的问题...关键在于正确地管理.NET Framework与IIS之间的权限关系,确保两者能够协调工作。对于开发者来说,了解这些底层的技术细节对于排除故障是非常有用的。希望本文能够帮助到遇到类似问题的朋友们。
ASP.NET 操作 IIS 工程文件主要涉及的是在 ASP.NET 开发环境中,如何通过代码对 Internet Information Services (IIS) 上的网站、应用程序池、虚拟目录等进行管理和配置。IIS 是微软提供的一个用于托管 Web 应用程序...
利用VS调试网站时候自带的Asp.net development server来代替IIS一部分的功能 使用方法: 1.将网站放到WebSite里面就可以执行了 2.或者设置网站目录 phycical path的指向 源代码都包含在内,你直接可以改装,随项目...
### 部署ASP.NET网站至IIS 7.0:关键知识点详解 #### 引言 部署ASP.NET网站到IIS 7.0是一项重要的技术活动,它涉及到多个方面,包括IIS 7.0的功能特性、部署过程中的最佳实践以及如何优化部署流程等。本文将基于...
总的来说,ASP.NET的工作原理是基于IIS的,通过ISAPI扩展和辅助进程实现请求的转发和处理。在IIS的不同版本中,这一过程有所变化,但核心的管道处理模型保持一致,使得开发者能够构建安全、高效的Web应用程序。了解...
本文旨在通过深入分析IIS的工作原理及其与ASP.NET之间的交互过程,帮助读者更好地理解IIS的运行机制。 #### ASP.NET与IIS的交互机制 在探讨IIS工作原理之前,有必要先了解ASP.NET页面与IIS之间的交互过程。大多数...
在.NET开发过程中,有时我们需要确保目标机器上已经安装了IIS(Internet Information Services)和.NET Framework,因为这两个组件...了解这些组件的工作原理以及如何检测它们的存在,对于.NET开发者来说是非常有益的。
这将使IIS和ASP.NET更好地协同工作。对于身份验证,如果需要窗体认证,记得启用“匿名身份验证”并关闭其他不必要的身份验证方法。 为了处理ASP.NET的错误,需配置IIS的错误页面。在站点级别或应用池级别,可以设置...
IIS(Internet Information Services)是微软的互联网服务器,用于托管Web应用程序,包括ASP.NET应用。本教程将详细介绍如何配置IIS来运行ASP.NET应用程序。 首先,确保你的系统已安装了IIS和ASP.NET支持。在...
【标题】"Visual Studio 2008 C# VB.NET C++.NET IIS7.0"涉及的关键知识点 本文将详细解析与标题“Visual Studio 2008 C# VB.NET C++.NET IIS7.0”相关的技术要点,包括Visual Studio 2008的特性、C#、VB.NET、C++...
IIS运行在名为InetInfo.exe的原生进程中,而ASP.NET应用程序则在aspnet_wp工作进程中运行,后者加载了CLR(公共语言运行库),形成了托管环境。 - **特点一**:在同一主机上,同一时间只能运行一个aspnet_wp进程。...
【ASP.NET编程知识】IIS部署ASP.NET5的实现步骤主要涵盖了如何在Windows Server环境下,利用IIS服务器来部署和管理ASP.NET Core应用程序。本文档适用于熟悉.NET开发,特别是对ASP.NET Core 5有一定了解的开发者,...
界面精美 替代iis运行asp.net的程序,支持局域网与广域网访问 需要安装.net4.0,方便布署 需要将安装.net4.0 并将所有文件复制到你的程序的根目录下,然后双击FWD.Server.exe 如果需要启动电脑即可访问,请将程序...
### ASP.NET MVC3 在 IIS6 上的部署详解 #### 部署环境与准备工作 在部署 ASP.NET MVC3 应用程序至 IIS6 的过程中,首先需要确保服务器环境符合以下条件: - **操作系统**: Windows Server 2003 - **Web 服务器**...