IIS5.X缺点:

  • ISAPI 动态连接库被加载到InetInfo.exe 进程中,它和工作进程之间是一种典型的跨进程通信方式,尽管采用命名管道,但是仍然会带来性能的瓶颈。
  • 所有的 ASP.NET 应用运行在相同进程(aspnet_wp.exe)中的不同的应用程序域中,基于应用程序域的隔离不能从根本上解决一个应用程序对另一个程序的影响。在更多的时
    候,我们需要不同的Web 应用运行在不同的进程中。

IIS6.X:

为了解决第一个问题,IIS 6.0 将ISAPI 动态连接库直接加载到工作进程中;为了解决第二个问题,引入了应用程序池(Application Pool)的机制。

除了上面两点改进之外,IIS 6.0 还有其他一些值得称道的地方。其中最重要的一点就是创建了一个名为HTTP.SYS 的HTTP 监听器。HTTP.SYS 以驱动程序的形式运行在Windows的内核模式(Kernel Mode)下,它是Windows 2003 的TCP/IP 网络子系统的一部分,从结构上看它属于TCP 之上的一个网络驱动程序。

HTTP.SYS 能够带来如下的好处

  • 持续监听:由于HTTP.SYS 是一个网络驱动程序,始终处于运行状态,对于用户的HTTP请求能够及时作出反应。
  • 更好的稳定性:HTTP.SYS 运行在操作系统内核模式下,并不执行任何用户代码,所以其本身不会受到Web 应用、工作进程和IIS 进程的影响。
  • 内核模式下数据缓存:如果某个资源被频繁请求,HTTP.SYS 会把响应的内容进行缓存,缓存的内容可以直接响应后续的请求。由于这是基于内核模式的缓存,不存在内核模式和用户模式的切换,响应速度将得到极大的改进。

IIS6.0缺点:

  • 相同操作的重复执行:IIS 与ASP.NET 之间具有一些重复的操作,比如身份验证。
  • 动 态文件与静态文件处理的不一致: 因为只有基于ASP.NET 动态文件( 比如.aspx、.asmx、.svc 等)的HTTP 请求才能通过ASP.NET ISAPI 进入ASP.NET 管道,而对于一些静态文件(比如.html、.xml、.img 等)的请求则由IIS 直接响应,那么ASP.NET管道中的一些功能将不能用于这些基于静态文件的请求,比如我们希望通过Forms 认证应用于基于图片文件的请求就做不到。
  • IIS 难以扩展:对于IIS 的扩展基本上就体现在自定义ISAPI,但是对于大部分人来说,这不是一件容易的事情。因为ISAPI 是基于Win32 的非托管的API,并非一种面向应用的编程接口。通常我们希望的是诸如定义ASP.NET 的HttpModule 和HttpHandler 一样,通过托管代码的方式来扩展IIS。

IIS7.0

IIS 7.0 大都将配置信息存放于XML 形式的配置文件中,基本的配置存放在applicationHost.config 中

7.0优点:

  • 允许通过本地代码(Native Code)和托管代码(Managed Code)两种方式定义IIS Module,这些IIS Module 注册到IIS 中形成一个通用的请求处理管道。由这些IIS Module 组成的
    这个管道能够处理所有的请求,不论请求基于怎样的资源类型。比如,可以将
    FormsAuthenticationModule 提供的Forms 认证应用到基于.aspx、CGI 和静态文件的请求。
  • 将 ASP.NET 提供的一些强大的功能应用到原来难以企及的地方,比如将ASP.NET 的URL 重写功能置于身份验证之前。
  • 采用相同的方式去实现、配置、检测和支持一些服务器特性(Feature),比如Module、Handler 映射、定制错误配置(Custom Error Configuration)等。

IIS与ASP.NET 通信机制深度剖析的更多相关文章

  1. ASP.NET Core管道深度剖析(2):创建一个“迷你版”的管道来模拟真实管道请求处理流程

    从<ASP.NET Core管道深度剖析(1):采用管道处理HTTP请求>我们知道ASP.NET Core请求处理管道由一个服务器和一组有序的中间件组成,所以从总体设计来讲是非常简单的,但 ...

  2. JVM的艺术-对象创建与内存分配机制深度剖析

    JVM的艺术-对象创建与内存分配机制深度剖析 引言 本章将介绍jvm的对象创建与内存分配.彻底带你了解jvm的创建过程以及内存分配的原理和区域,以及包含的内容. 对象的创建 类加载的过程 固定的类加载 ...

  3. ASP.NET Core管道深度剖析

    ASP.NET管道 以IIS 6.0为例,在工作进程w3wp.exe中,利用Aspnet_ispai.dll加载.NET运行时(如果.NET运行时尚未加载).IIS 6引入了应用程序池的概念,一个工作 ...

  4. ASP.NET Core管道深度剖析[共4篇]

    之所以称ASP.NET Core是一个Web开发平台,源于它具有一个极具扩展性的请求处理管道,我们可以通过这个管道的定制来满足各种场景下的HTTP处理需求.ASP. NET Core应用的很多特性,比 ...

  5. ASP.NET Core管道深度剖析(4):管道是如何建立起来的?

    在<管道是如何处理HTTP请求的?>中,我们对ASP.NET Core的请求处理管道的构成以及它对请求的处理流程进行了详细介绍,接下来我们需要了解的是这样一个管道是如何被构建起来的.这样一 ...

  6. ASP.NET Core管道深度剖析(3):管道是如何处理HTTP请求的?

    我们知道ASP.NET Core请求处理管道由一个服务器和一组有序的中间件组成,所以从总体设计来讲是非常简单的,但是就具体的实现来说,由于其中涉及很多对象的交互,我想很少人能够地把它弄清楚.为了让读者 ...

  7. ASP.NET Core管道深度剖析(1):采用管道处理HTTP请求

    之所以称ASP.NET Core是一个Web开发平台,源于它具有一个极具扩展性的请求处理管道,我们可以通过这个管道的定制来满足各种场景下的HTTP处理需求.ASP. NET Core应用的很多特性,比 ...

  8. Java反射机制深度剖析

    版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! Java反射机制是Java语言中一种很重要的机制,可能在工作中用到的机会不多,但是在很多框架中都有用到这种机制.我们知道Java是一门静态 ...

  9. ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借

    ASP.NET MVC深入浅出系列(持续更新)   一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...

随机推荐

  1. yum 搭建lnmp环境详细步骤

    1.关闭防火墙[root@CentOS ~]# chkconfig iptables off 2.关闭selinuxvi /etc/sysconfig/selinux//将SELINUX=enforc ...

  2. phpMemcache消息队列类

    <?php /** * Memcache 消息队列类 */ class QMC { const PREFIX = 'ASDFASDFFWQKE'; /** * 初始化 mc * @staticv ...

  3. 使用飞信api接口实现短信发送(只能发送好友)

    找了很久才找到一个能用的飞信API接口(http://quanapi.sinaapp.com/fetion.php?u=飞信登录手机号&p=飞信登录密码&to=接收飞信的手机号& ...

  4. 如何利用PowerPoint2013制作阶梯流程图?

    制作阶梯流程图有哪些窍门呢?下面我们一起来看看吧: ①启动PowerPoint2013,单击菜单栏--插入--形状,选择方角矩形,在图中画出来. ②画好矩形,摆放到合适的位置,如下图所示. ③然后再次 ...

  5. 常用命令(ubuntu)

    1.打开终端的方法 Ubuntu 中按左侧栏的第一个“面板主页(Dash 主页)”(可以按win键调出),在里面输入terminal可以打开终端,另外打开终端的快捷键是Ctrl+Alt+T 2.修改用 ...

  6. iOS编程修改系统音量

    iOS的AVFoundation框架提供了基本的音视频播放工具,我们基本上可以靠其中提供的类完成绝大部分的音视频播放任务.但是在音频播放的输出音量的处理上,苹果的策略比较保守.尽管AVPlayer和A ...

  7. ROHS無鉛問題解答!ROHS IPC SGS

    無鉛smt(smd)問題1. 問Maxim關于無鉛的定義是什么?答無鉛表示在封裝或產品制造中不含鉛(化學符號為Pb).IC封裝中,Pb在外部引腳拋光或電鍍中很常見.對于晶片級封裝(UCSP和倒裝芯片) ...

  8. org.quartz.utils.UpdateChecker Checking for available updated version of Quartz..

    <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</ ...

  9. 项目mysql数据导入数据的Java程序

    最近写的一个数据库导入数据的程序,有兴趣的同学可以参考一下: 这个程序是针对mysql数据库的,在本地或服务器上运行,主要的需求还是,针对项目的某些bug修复 后,客户的数据要搬到新表上来,避免新版本 ...

  10. centos ppp拨号

    CentOS 6.4 电信ADSL 拨号连接的配置,亲测 .下载 rp-pppoe-3.8.tar.gz http://down1.chinaunix.net/distfiles/rp-pppoe-3 ...