ASP.NET的本质之IIS以及进程模式

ASP.net对于编写WEB应用程序以及组件来说是一个很好的框架,但是由于他的庞大性对于很多人来说要了解他的每一个细节好象是否不太可能,我一直认为有必要了解一下基层结构的工作原理以便在设计时获取更高的性能,在接下来的一系列文章中,我将要描叙一下WEB的生命周期,从当请求被服务器接受开始,传送到ASP.net管道处理一直到生成回送信息(如:HTML)在管道处理后期。

介绍

Microsoft Active Server Pages(微软动态网页服务),同样也被大家称为ASP,首先是在1996年末年发布的,为程序员提供一个用来建立WEB应用程序丰富复杂的框架。几年后,他的基础构造发展改进了很多,也就是大家现在所了解的ASP.net.ASP.net是一个用来构件WEB应用程序的框架,也就是说,他必须运行在WEB服务上,用客服端-服务端模型了表述的话通常是浏览器发送不同类型的资源请求到WEB服务器。在出现动态服务器资源生成技术(如CGI,PHP,JSP以及ASP),所有的WEB服务只能接受客服端的静态资源请求并把他们回送到客服端。

表面上看起来,这样在服务端和客户端的交互是非常的简单。会话通过HTTP协议进行,他是一个建立在TCP和IP协议(用来在2个连接到不同类型的网络端点交换数据,如我们所知道的WWW万维网)上的应用程序级协议。

本质上任何动态服务器技术需要运行在特定WEB服务上,同样ASP.net紧密地和微软因特网信息服务,也叫做IIS。

不同的服务选择不同的方式去生成动态资源等等。。。我们将要解析一下IIS是怎么做到的当一个请求信息一旦到达服务端以及最后回送到客户端。

IIS and ISAPI 扩展

如上面提到的,静态资源不需要被服务器处理;一旦这样的资源请求到达服务器,服务器只需要从文件系统中找到他的内容并且以字节流形式发送到客户端通过HTTP协议。静态资源可以是图片,javascript,CSS或者普通HTML页面。很显然服务器需要知道怎样去区分静态和动态资源,动态资源需要如何被处理而不是直接发送回客户端。因此出现了ISAPI扩展,ISAPI是因特网服务应用程序编程的接口。ISAPI作为模块被执行如早期的Win32.dll.IIS依靠ISAPI来处理特定的资源。通过IIS映射ISAPI扩展和文件的方式,把每种文件扩展类型关联到特定的ISAPI扩展,也就是说,当一个请求某种文件的请求到达,IIS处理并转到相应的ISAPI扩展,以确认这种请求能被处理。

图表1:在IIS5.0中配置ISAPI扩展映射

ISAPI扩展明显需要符合一个通用接口,这样他们才能被IIS调用并提供必要的数据用来处理请求和生成回送。

如图1,.ASP扩展名被映射到asp.dll ISAPI扩展;在ASP处理时段,这个组件负责执行所有需要的任务去生成回送,也就是说,通过收集请求信息,并使得他能够在ASP页面可用,其他ASP内部对象,解析并执行ASP页面最后以HTML形式返回结果。

尽管,这样相对于CGI技术来说已经是很大的进步了,但是ASP.net更强大。

在安装ASP.net后,ASP.net配置IIS 把ASP.net指定的文件请求重定向到一个新的ISAPI扩展aspnet_isapi.dll.这个扩展有些不同于以前的asp.dll扩展。

表格I:aspnet_isapi.dll在IIS应用程序中的映射

ExtensionResource Type

.asaxASP.NET 应用程序文件. 常用的有 global.asax.

.ascxASP.NET 用户控件文件.

.ashxHTTP handlers, the managed counterpart of ISAPI extensions.

.asmxASP.NET web services.

.aspxASP.NET web pages.

.axdASP.NET internal HTTP handlers.

除了表格1所列出的文件扩展名,ASP.net ISAPI扩展也管理其他一些通常不提供给浏览器访问的文件扩展类型,如Visual Studio工程文件,资源文件以及配置文件。

时间: 2024-10-06 03:28:16

ASP.NET的本质之IIS以及进程模式的相关文章

ASP.NET Process Model之一 IIS 和 ASP.NET ISAPI_win服务器

前几天有一个朋友在MSN上问我"ASP.NET 从最初的接收到Http request到最终生成Response的整个流程到底是怎样的?"我觉得这个问题涉及到IIS和ASP.NETASP.NET Runtime的处理模型的问题,并不是三言两语就能说清楚的,所以决定写这样一篇介绍IIS和ASP.NET Runtime Process Model的文章,谈谈我对此的一个粗浅的认识,如果有什么不对的地方,希望大家及时指正. 这篇文章大体分为两个部分,第一部分我将谈谈IIS的两个不同的版本-I

ASP.NET操作Word的IIS权限设置

ASP.NET账号在默认情况下是没有权限操作Microsoft Office对象的,如果不进行权限的配置,代码会抛出类似以下的异常: 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005. 这样给Asp.NET操作Microsoft Office对象带来了一定的困难.但我们还是要想办法来进行Office对象的操作.下面简单介绍一下本人在开发过程中曾经使用过的方法: 方法1:配置W

asp.net 的进程模式

asp.net|进程|asp.net|进程 asp.net 的进程模式 使用进程模型进程模型配置被动进程回收主动进程回收记录进程模型事件启用网络园本节小结 --------------------------------------------------------------------------------对 ASP.NET 框架应用程序最重要的要求之一是可靠性.在服务器进程内运行的应用程序(在 IIS 中为 Inetinfo.exe)的结构没有为生成可继续长时间运行的可靠应用程序提供坚

ASP.NET是如何在IIS下工作的

原文:ASP.NET是如何在IIS下工作的 ASP.NET与IIS是紧密联系的,由于IIS6.0与IIS7.0的工作方式的不同,导致ASP.NET的工作原理也发生了相应的变化.   IIS6(IIS7的经典模式)与IIS7的集成模式的不同 IIS6的运行过程: 分析上图可知:     在 User Mode 下,http.sys 接收到 http request,然后它会根据 IIS 中的 Metabase 查看基于该 Request 的 Application 属于哪个 Application

ASP.NET操作Word的IIS权限设置_实用技巧

ASP.NET账号在默认情况下是没有权限操作Microsoft Office对象的,如果不进行权限的配置,代码会抛出类似以下的异常: 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005. 这样给Asp.NET操作Microsoft Office对象带来了一定的困难.但我们还是要想办法来进行Office对象的操作.下面简单介绍一下本人在开发过程中曾经使用过的方法: 方法1:配置W

将Asp.Net网站发布到IIS的四种方法

  将Asp.Net网站发布到IIS的四种方法及注意事项: 不管是那种发布方法, 第一件事情是让IIS能够支持asp.net程序, 默认IIS是不开器asp.net网站程序的支持的.在IIS中的"Web服务扩展"中, 确保"ASP.NET v2.0.50727"被启用. 其他的可以保持禁用状态. 发布方法1:---直接复制到IIS目录发布目录中(C:Inetpubwwwroot) a. 将经过VS调试且运行正常的ASP.NET网站项目的文件夹复制到IIS的wwwro

asp.net中怎么配置IIS?

问题描述 asp.net中怎么配置IIS? 解决方案 解决方案二:http://msdn2.microsoft.com/zh-cn/library/6hy1xzbw(VS.80).aspx解决方案三:问的不怎么清晰啊,IIS6.0默认支持ASP.NET1.1,想要支持2.0的话到microsoft下个支持包就行了.如果是开发的话装个VS2005就支持2.0了.解决方案四:问题不明确,你要配置IIS的什么???是在ASP.NET代码中对IIS进行设置么?ASPNET用户默认情况下是没有这个权限的.

在ASP.NET MVC中使用IIS级别的URL Rewrite

原文 在ASP.NET MVC中使用IIS级别的URL Rewrite 大约一年半前,我在博客上写过一系列关于URL Rewrite的文章(2.3.4),把ASP.NET平台上进行URL Rewrit的方式和各自地特点进行了较为详细的描述.应该来说,已经讲的非常具体,可以应对90%的情况.其实IIS Rewrite的原理非常容易理解,进行一些简单的变化和推断之后,便可以得出一些问题的原因和解决方案.现在我们就来看一个真实案例:在ASP.NET MVC中使用IIS级别的URL Rewrite. 在

asp.net实现上传图片时判断图片的模式GRB或CMYK的方法_实用技巧

本文实例讲述了asp.net实现上传图片时判断图片的模式GRB或CMYK的方法.分享给大家供大家参考,具体如下: Bitmap bmp = new Bitmap(allow_fileStream); //文件路径 allowUpload = stringHelper.IsCMYK(bmp) == "true" ? false : true; //返回true字符串则图片不是RGB模式的 public string IsCMYK(System.Drawing.Image img) { s