• IIS与ASP.NET Http Runtime Pipeline


    最近在看artech的wcf文章时,接触到他的几篇IIS 和 ASP.NET ISAPI的文章,感觉写的非常好。同时参考其他一些资料对IIS与ASP.NET Http Runtime Pipeline做了这次简单的总结。

     对于IIS处理asp.net资源的流程梳理一番后,大致画了下面这些图,目的是为了加深理解。更详细内容可以查看artech的几篇文章:http://www.cnblogs.com/artech/archive/2007/09/09/887528.html

    IIS对用户请求的处理?

    用户访问IIS静态资源,IIS会直接提取对应的文件并将其作为Http Response返回给Client。

    用户访问IIS动态资源,IIS会将Request进一步传递给对应的处理程序处理程序执行完毕获得最终的Http Response通过IIS返回给Client。

    上面所说的处理程序就是通过ISAPI Extension来体现。

    IIS如何将不同的Resource对应到ISAPI?

        IIS的Metadata database维护着一个称为ISAPI Extension Mapping的数据表,负责将不同类型的Resource影射到对应的ISAPI Extension。

    ASP.NET对应的ISAPI是什么?

    对于基于ASP.NET的资源来说,对应的ISAPI为ASP.NET ISAPI,通过一个aspnet_isapi.dll承载

    IIS5.X处理ASP.NET Resource的流程

     

     

    注意

    1)同一台主机上再同一时间只能运行一个aspnet_wp进程,每个基于虚拟目录的ASP.NET Application对应一个Application Domain,也就是说每个Application都运行在同一个Worker Process中,Application之间的隔离是基于Application Domain的,而不是基于Process的。

    2)ASP.NET  ISAPI不但负责创建aspnet_wp Worker Process,而且负责监控该进程,如果检测到aspnet_wp的Performance降低到某个设定的下限,ASP.NET  ISAPI会负责结束掉该进程。当aspnet_wp结束掉之后,后续的Request会导致ASP.NET ISAPI重新创建新的aspnet_wp Worker Process。

    3)由于IIS和Application运行在他们各自的进程中,他们之间的通信必须采用特定的通信机制。本质上IIS所在的InetInfo进程和Worker Process之间的通信是同一台机器不同进程的通信(local interprocess communications),处于Performance的考虑,他们之间采用基于Named pipe的通信机制。ASP.NET ISAPI和Worker Process之间的通信通过他们之间的一组Pipe实现。同样处于Performance的原因,ASP.NET ISAPI通过异步的方式将Request 传到Worker Process并获得Response,但是Worker Process则是通过同步的方式向ASP.NET ISAPI获得一些基于Server的变量。

    IIS6处理ASP.NET Resource的流程

     

    IIS5.X的缺陷

    1)从Performance上看,IIS和application运行在不同的进程中,虽然他们之间采用了基于Named Pipe的异步通信方式,但是一个基于进程之间的通信对性能的影响确实不能从根本上解决。

    2)从Reliability来考虑,一台机器上只能运行一个worker process,每个Application运行在同一个进程中,虽然基于Application Domain的隔离能提供一定的Reliability,但是一旦整个进程崩溃,所有的Application都受影响。所以我们有时候需要提供一个基于Process的隔离性。

    IIS6的改进

    1)基于Reliability的改进,IIS 6引入了Application Pool。

    在创建Web Application的时候,我们为它指定一个既定的application pool。在运行的时候,一个Application对应一个Worker Process:w3wp.exe。,同一台机器上可以同时运行多个Worker Process,每个Worker Process中的每个Application domain对应一个Application。

    2)在Performance方面,IIS 5.x是通过InetInfo.exe监听Request并把Request分发到Work Process。换句话说,在IIS 5.x中对Request的监听和分发是在User Mode(用户模式)中进行,在IIS 6中,这种工作被移植到kernel Mode(内核模式)中进行,所有的这一切都是通过一个新的组件:http.sys来负责。

     

    ASP.NET Http Runtime Pipeline

     

     


  • 相关阅读:
    感悟.学习的方式
    IOS地理信息使用
    IOSTimer的例子留个备注
    IOSSelector的用法
    ios中addtarget的用法
    ios绘图时的坐标处理
    mac下装Ruby
    iOSbase64
    ios跳转
    Misha and Palindrome Degree CodeForces
  • 原文地址:https://www.cnblogs.com/tenghoo/p/IIS_And_ASPNET_Http_Runtime_Pipeline.html
Copyright © 2020-2023  润新知