zoukankan      html  css  js  c++  java
  • 【asp.net IIS运行机制】个人总结

    IIS运行图

    图片引自【wenthink】的博文,原文地址:http://www.cnblogs.com/wenthink/archive/2013/05/06/HTTP_IIS_ASPNET_Pipeline.html

    IIS 运行机制详解

    本文以IIS6为例,因为IIS6之后,IIS有集成模式和经典模式了 注:集成模式,将IIS和aspnet_Isapi.dll 集成到一起了

    IIS中有用户模式和内核模式: ①:用户模式不能直接操作内存

                                         ②:内核模式,直接操作内存

    浏览器请求流程:

    ①:发送请求到服务器IIS

    ②:服务器IIS用户模式中的http.sys 接收到 http request

    ③:然后它会根据 IIS 中的 Metabase(IIS元数据,维护者Application Pool 和 Worker Process(w3wp.exe) 的Mapping(映射关系)。) 查看基于该请求的 应用程序,属于哪个 Application Pool(应用程序池), 如果该 Application Pool 不存在,则创建;否则直接将 request 发到对应 Application Pool 的 Queue中。 注: IIS6中有应用程序池机制,通过队列来保存已有的池,IIS7以后可以在IIS中创建网站时,指定某一网站使用某一个应用程序池 一个应用程序池对应着一个Worker Process(w3wp.exe)

    ④:WAS(Web Administrative Service)根据 IIS元数据中维护的映射关系 ,获取 应用程序池 Queue 对应的Worker Process(w3wp.exe),如果没有,就创建这样一个进程,然后将请求交给这个 w3wp.exe 执行(这里就是我们在调试程序时,可以在任务管理器中查看到的IIS启动进程)

    ⑤:在创建Worker Process(w3wp.exe)的时候就会根据后缀找到并加载对应的ISAPI扩展,可以在IIS中指定某些后缀的请求需要调用哪个ISAPI(这些扩展程序,在安装IIS后会在电脑C盘)

     ⑥:以ASPNET_ISAPI.DLL为例

          在Worker Process(w3wp.exe)被创建时,根据请求后缀加载ASPNET_ISAPI.DLL这个程序集,加载ASPNET_ISAPI.DLL时,就会加载ASP.NET应用程序的运行环境(CLR)

    ⑦:加载CLR后,由  AppManagerAppDomainFactory类中的Create方法,创建AppDomain(应用程序域)

        注:应用程序池用来分割每个程序的运行,保证程序运行的安全,一个应用程序池不能访问另一个应用程序池中的资源

    ⑧:然后在AppDomain中加载ISAPIRuntime

    .....

  • 相关阅读:
    html5 postMessage解决跨域、跨窗口消息传递
    获取url参数值(可解码中文值)
    正则去除字符串中的html标签,但不去除<br>标签
    vue中watch检测到不到对象属性的变化的解决方法
    封装LocalStorage.js
    this.$router.push、replace、go的区别
    Javascript实现base64的加密解密
    堆排序
    归并排序
    单例模式
  • 原文地址:https://www.cnblogs.com/JsonYang/p/3594989.html
Copyright © 2011-2022 走看看