标签:获取 封装 内核 cto 握手 文件读取 托管 spn .dll
刚开始与服务器通过3次握手建立连接后将用户动作封装成http请求的报文,然后通过Socket客户端发送到后台服务器
的内核模块中的HTTP.SYS(),然后将请求分发给用户模式中的IIS,IIS中的w3svc服务(svchost.exe)拿到请求后,
如果是静态文件(html,css,js....),直接将请求的文件读取出来封装成响应报文发送给客户端,如果是动态文件,
发现自己处理不了,就去inetinfo.exe进程里面获得当前请求交给谁处理, 再将请求分发给具体的工作进程(w3wp.exe)
里面的aspnet_isapi.dll(IIS6+版本,aspnet_isapi.dll在工作进程的非托管模块里面),然后把请求给托管环境的
ISAPIRuntime的ProcessRequest方法,此方法有一个ecb句柄,
把ecb句柄指向的内容创建成了一个HttpWorkerRequest对象,然后交给HttpRuntime,将创建的HttpWorkerRequest对象
传递给HttpRuntime的PR方法,在HttpRuntime方法内部再将HttpWorkerRequest对象继续封装成高级的HTTPContext
上下文对象,HTTPContext包含了HttpRequest和HttpResponse等对象,然后通过HttpApplicationFactory从对象池
(为了重用对象,解决性能慢的问题,说白了就是一个对象数组)中获取一个HttpApplication实例,让HttpApplication
负责执行管道的流动,然后依次返回给客户端
标签:获取 封装 内核 cto 握手 文件读取 托管 spn .dll
原文地址:http://www.cnblogs.com/xiaoweigogo/p/7800079.html