[翻译]了解ASP.NET底层架构系列文章(包括Word下载)
摘要:[翻译]了解ASP.NET底层架构(一) [翻译]了解ASP.NET底层架构(二) [翻译]了解ASP.NET底层架构(三) [翻译]了解ASP.NET底层架构(四) [翻译]了解ASP.NET底层架构(五) [翻译]了解ASP.NET底层架构(六) [翻译]了解ASP.NET底层架构(七) [翻译]了解ASP.NET底层架构(八) [翻译]了解ASP.NET底层架构(完) 完整Word文档下载[...
阅读全文
posted @
2006-09-04 13:37
tmfc
阅读(4620)
推荐(0) 编辑
[翻译]了解ASP.NET底层架构(完)
摘要:唷-我们已经走完了整个请求处理过程了.这过程中有很多底层的信息,我对HTTP模块和HTTP处理器是怎么工作的并没有描述的非常详细.挖掘这些信息相当的费时间,我希望在了解了ASP.NET底层机制后,你能获得和我一样的满足感.
在结束之前让我们快速的回顾一下我在本文中讨论的从IIS到处理器(handler)的过程中,事件发生的顺序
IIS获得请求
检查脚本映射中,此请求是否映射到aspnet_isapi.dll
启动工作进程 (IIS5中为aspnet_wp.exe,IIS6中为w3wp.exe)
.NET运行时被载入
阅读全文
posted @
2006-09-04 09:00
tmfc
阅读(2648)
推荐(0) 编辑
[翻译]了解ASP.NET底层架构(八)
摘要:HttpHandlers
模块是相当底层的,而且对每个来到ASP.NET应用程序的请求都会被触发.Http处理器更加的专注并处理映射到这个处理器上的请求.
Http处理器需要实现的东西非常简单,但是通过访问HttpContext对象它可以变得非常强大.Http处理器通过实现一个非常简单的IHttpHandler接口(或是它的异步版本,IHttpAsyncHandler),这个接口甚至只含有一个方法-ProcessRequest()-和一个属性IsReusable.关键部分是ProcessRequest(),这个函数获取一个HttpContext对象的实例作为参数.这个函数负责从头到尾处理Web请求.
单独的,简单的函数?太简单了,对吧?好的,简单的接口,但并不弱小!记住WebForm和WebService都是作为Http处理器实现的,所以在这个看上去简单的接口中包装了很强大的能力.关键是这样一个事实,当一个请求来到Http处理器时,所有的ASP.NET的内部对象都被准备和设置好来处理请求了.主要的是HttpContext对象,提供所
阅读全文
posted @
2006-09-04 08:59
tmfc
阅读(2299)
推荐(0) 编辑
[翻译]了解ASP.NET底层架构(七)
摘要:“流过”ASP.NET管道
HttpApplication触发事件来通知你的程序有事发生,以此来负责请求流转.这作为HttpApplication.Init()函数的一部分发生(用Reflector查看System.Web.HttpApplication.InitInternal()方法和HttpApplication.ResumeSteps()方法来了解更多详情),连续设置并启动一系列事件,包括执行所有的处理器(handler).这些事件处理器映射到global.asax中自动生成的哪些事件中,同时它们也映射到所有附加的HttpModule(它们本质上是HttpApplication对外发布的额外的事件接收器(sink)).
HttpModule和HttpHandler两者都是根据Web.config中对应的配置被动态载入并附加到事件处理链中.HttpModule实际上是事件处理器,附加到特殊的HttpApplication事件上,然而HttpHandler是用来处理”应用级请求处理”的终点.
HttpModule和HttpHan
阅读全文
posted @
2006-09-03 09:37
tmfc
阅读(2541)
推荐(0) 编辑
[翻译]了解ASP.NET底层架构(六)
摘要:HttpRuntime,HttpContext和HttpApplication
当一个请求到来时,它被路由到ISAPIRuntime.ProcessRequest()方法.这个方法调用HttpRuntime.ProcessRequest方法,它作一些重要的事情(用Reflector查看System.Web.HttpRuntime.ProcessRequestInternal方法):
为请求创建一个新的HttpContext实例
获取一个HttpApplication实例
调用HttpApplication.Init()方法来设置管道的事件
Init()方法触发开始ASP.NET管道处理的HttpApplication.ResumeProcessing()方法
阅读全文
posted @
2006-09-02 21:22
tmfc
阅读(3133)
推荐(0) 编辑
[翻译]了解ASP.NET底层架构(五)
摘要:回到运行时
在这里我们有一个在ISAPI扩展中活动的,可调用的ISAPIRuntime对象的实例.每当运行时是启动的并运行时,ISAPI的代码调用ISAPIRuntime.ProcessRequest()方法,这个方法是真正的进入ASP.NET管道的入口.这个流程在图4中显示.
记住ISAPI是多线程的,所以请求也会通过AppDomainFactory.Create()(译注:原文为ApplicationDomainFactory,疑有误)函数中返回的引用在多线程环境中被处理.列表1显示了ISAPIRuntime.ProcessRequest()方法中反编译后的代码,这个方法接收一个ISAPI ecb对象和服务类型(WorkerRequestType)作为参数.这个方法是线程安全的,所以多个ISAPI线程可以同时在这一个被返回的对象实例上安全的调用这个方法.
阅读全文
posted @
2006-09-01 09:27
tmfc
阅读(3398)
推荐(0) 编辑
[翻译]了解ASP.NET底层架构(四)
摘要:进入.NET运行时
进入.NET运行时的真正的入口发生在一些没有被文档记载的类和接口中(译著:当然,你可以用Reflector来查看J).除了微软,很少人知道这些接口,微软的家伙们也并不热衷于谈论这些细节,他们认为这些实现细节对于使用ASP.NET开发应用的开发人员并没有什么用处.
工作进程(IIS5中是ASPNET_WP.EXE,IIS6中是W3WP.EXE)寄宿.NET运行时和ISAPI DLL,它(工作进程)通过调用COM对象的一个小的非托管接口最终将调用发送到ISAPIRuntime类的一个实例上(译注:原文为an instance subclass of the ISAPIRuntime class,但是ISAPIRuntime类是一个sealed类,疑为作者笔误,或者这里的subclass并不是子类的意思).进入运行时的第一个入口就是这个没有被文档记载的类,这个类实现了IISAPIRuntime接口(对于调用者说明来说,这个接口是一个COM接口)这个基于Iunknown的底层COM接口是从ISAPI扩展到ASP.NET的一个预定的接口.图
阅读全文
posted @
2006-08-31 20:45
tmfc
阅读(3382)
推荐(0) 编辑
[翻译]了解ASP.NET底层架构(三)
摘要:IIS 5 和6以不同的方式工作
当一个请求来到时,IIS检查脚本映射(扩展名映射)然后把请求路由到aspnet_isapi.dll.这个DLL的操作和请求如何进入ASP.NET运行时在IIS5和6中是不同的.图2显示了这个流程的一个粗略概览.
在IIS5中,aspnet_isapi.dll直接寄宿在inetinfo.exe进程中,如果你设置了Web站点或虚拟目录的隔离度为中或高,则会寄宿在IIS单独的(被隔离的)工作进程中.当第一个ASP.NET请求来到,DLL(aspnet_isapi.dll)会开始另一个新进程aspnet_wp.exe并将请求路由到这个进程中来进行处理.这个进程一次加载并寄宿.NET运行时.每个转发到ISAPI DLL的请求都会通过命名管道调用被路由到这个进程来.
阅读全文
posted @
2006-08-31 09:19
tmfc
阅读(4089)
推荐(0) 编辑
[翻译]了解ASP.NET底层架构(二)
摘要:从浏览器到ASP.NET
让我们从一个典型的ASP.NET Web请求的生命周期的起点开始.当用户输入一个URL,点击了一个超链接或者提交了一个HTML表单(form)(一个POST请求,相对于前两者在一般意义上都是GET请求).或者一个客户端程序可能调用了一个基于ASP.NET的WebService(同样由ASP.NET来处理).
阅读全文
posted @
2006-08-30 09:32
tmfc
阅读(5490)
推荐(0) 编辑
[翻译]了解ASP.NET底层架构(一)
摘要:从系统级别了解ASP.NET并帮助理解请求(request)是如何在ASP.NET的处理管道中流转的.同样,我们会了解核心引擎和Web请求如何在那里结束.这些信息大部分并不是你在日常工作时必须了解的,但是它对于理解ASP.NET架构如何把请求路由到你的代码(通常是非常高层的)中是非常有益的.
阅读全文
posted @
2006-08-29 20:37
tmfc
阅读(10375)
推荐(2) 编辑