在写这篇博客之前,知好多前辈已经写过,自己班门弄斧,主要是加深自己对细节的理解,另一方面希望对浏览此篇文章的读者一个新的认识。注定是一长篇。肯定有新的认识,图示都是原创。
此篇所有牵涉的细节,我会一一列出,估计持续更新数日。
当从浏览器发送到服务器一个请求,整个流程与细节的把握。IIS5和IIS6的有些许的不同。
全面理解,把握细节:
一,请求到达IIS再到Framework。
若看以下的讲解,需要了解:
1,IIS5和IIS6都具备inetinfo.exe进程。
2, inetinfo.exe(任务管理器看到)的作用:包括许多由IIS提供的服务(HTTP、FTP、SMTP等)。Inetinfo.exe接收来自TCP/IP子系统的请求,并将这些请求送往各自的服务, 这些服务又解释请求,执行请求,并把结果返回给客户机。因为所有这些服务都在同一个进程 (inetinfo.exe) 中运行,所以它们能够共享高速缓存的数据,如文件句柄、 帐户信息和日志文件数据。
3,Name Pipes命名管道是一种协议,相当于TCP/IP中的Socket协议,两者有很大的相似之处,用到局域网和广域网的各自优点。
详情请参照:http://msdn.microsoft.com/zh-cn/library/ms187892.aspx
4,inetinfo.exe和aspnet_isapi.dll的关系,这里之处为”调用“是否有不妥之处。也就是了解.exe文件和.dll文件的之间的关系,此点自己查阅相关资料。
5,注册表:在这里的主要作用为文件的关联。详情自己查阅相关资料。
6,Work Process工作者进程在IIS5和IIS6分别叫做w3wp.exe和aspnet_wp.exe。两者指得都是工作者进程,只是名字不同。
7,IIS和FrameWork之间的通信:IIS是非托管程序,而FrameWork上是托管程序,两者通过指针ecb将Request传递资源包。
8,托管和非托管代码代码。请参考:http://www.cnblogs.com/Holmes-Jin/archive/2012/03/14/2396411.html
9,http.sys在(C:\Windows\System32\drivers\)中,内核模式与用户模式,属于操作系统的知识,这里不做深入研究。
一,IIS5由inetinfo.exe接受来自浏览器的请求,然后调用”aspnet_isapi.dll“,aspnet_isapi.dll"遵照"”命名管道协议Named Pipes“通过ecb指针和Work Process(w3wp.exe)进行传输,此时aspnet_isapi.dll与w3wp.exe属于不同的进程,传输效率不是最优的,在iis6中优化了这一点。
二,IIS6是服务器的网卡驱动内核模块C:\Windows\System32\drivers\http.sys监听到,然后会查询注册表Regitry此请求和那个应用程序关联(注册表的用途之一)处理。交予W3SVC服务(属于svchost.exe进程中的一个服务,能在任务管理器“服务“中看到,)然后查看inetinfo.exe交予aspnet_isapi.dll,此时的aspnet_isapi.dll被划进Worker Process工作者进程中(aspnet_wp.exe),交予FrameWork处理。因为aspnet_wp.exe与FrameWork属于同一工作者进程,传输效率大大优于IIS5。IIS6,它是完全为ASP.NET做过优化的。
是的,我也做个图。
二,请求到达进入framework后所做的处理。