httpRuntime与ASP.NET 运行时及IIS处理模型
配置 ASP.NET HTTP 运行时设置,以确定如何处理对 ASP.NET 应用程序的请求,配置节及其描述如下所示。
<httpRuntime
executionTimeout="110"--------------------------指定在被 ASP.NET 自动关闭前,允许执行请求的最大秒数
maxRequestLength="4096"--------------------------指定输入流缓冲阈值限制(以 KB 为单位)。此限制可用于防止拒绝服务攻击;例如,因用户向服务器发送大型文件而导致的拒绝服务攻击。
requestLengthDiskThreshold="256"--------------------------定输入流缓冲阈值限制(以字节为单位)。该值不应超过 maxRequestLength 属性。
useFullyQualifiedRedirectUrl="false"
minFreeThreads="8"--------------------------请求时空闲时最小线程数
minLocalRequestFreeThreads="4"--------------------------本地请求时最小的空闲线程数
appRequestQueueLimit="5000"--------------------------指定 ASP.NET 将为应用程序排队的请求的最大数目。当没有足够的自由线程来处理请求时,将对请求进行排队。当队列超出了该属性中指定的限制时,将通过"503 - 服务器太忙"错误信息拒绝传入的请求。
enableKernelOutputCache="true"--------------------------启用输出缓存 IIS6以后版本生效
enableVersionHeader="true"--------------------------是否在头部输出版本
requireRootedSaveAsPath="true"--------------------------指定 SaveAs 方法中的 filename 参数是否必须为绝对路径。ASP.NET 进程必须具有在指定位置中创建文件的权限。
enable="true"--------------------------相当于关闭应用程序(连静态页面也无法访问)指定是否在当前的节点及子节点级别启用应用程序域 (AppDomain),以接受传入的请求。如果为 False,则实际上关闭了该应用程序
shutdownTimeout="90"--------------------------关闭超时单位 秒 指定允许辅助进程关闭的分钟数。在达到该超时时间时,ASP.NET 关闭辅助进程。
delayNotificationTimeout="5"--------------------------延迟通知超时时间 秒为单位
waitChangeNotification="0"--------------------------等待变更通知
maxWaitChangeNotification="0"--------------------------最大等待变更通知数
requestPriority="Normal"--------------------------请求策略
enableHeaderChecking="true"--------------------------启用头部检查 以检测可能的注入式攻击。如果检测到攻击,ASP.NET 将返回错误作为响应。
sendCacheControlHeader="true"--------------------------指定是否发送默认情况下设置为 Private 的缓存控制标头。如果为 True,则客户端缓存被禁用。
apartmentThreading="false"-----------启用单元线程处理以实现传统的 ASP 兼容性。
/>
从上面的特性而言大概概括成HttRuntime的自身运行方面(包括重启时间,线程数控制,请求队列),请求头限制响应输出。
而HttpRuntime还涉及到其他方面,如Http管道,IIS的运行模型。有其他博文从代码角度列举了从一个请求到达后,在AppDomain中创建HttpRuntime,HttpContext,HttpApplication,各个HttpModule,到HttpHandler处理。
舍长的《深入理解ASP.NET的内部运行机制》
此外之前在看Http管道时一直没仔细去搞清楚IIS的处理模型,在此也补一补。IIS到我现在看为止已经到了7.0的版本,网上有不少资料从5.0开始说起,既然如此就从5.0说起,看看其变迁。
以下图片均摘自蒋金楠老是的著作《ASP.NET MVC 4 框架揭秘》
IIS5处理模型
IIS 5.x 运行在进程 InetInfo.exe 中,该进程寄宿着一个名为 World Wide Web Publishing Service(简称 W3SVC)的 Windows 服务。 W3SVC 的主要功能包括 HTTP 请求的监听、工作进程和配置管理(通过从 Metabase 中加载相关配置信息)等。
如果我们请求的是一个基于 ASP.NET 的资源类型,比如.aspx、 .asmx 和.svc 等,aspnet_isapi.dll 会被加载,而 ASP.NET ISAPI 扩展会创建 ASP.NET 的工作进程(如果该进程尚未启动)。对于 IIS 5.x 来说,该工作进程为 aspnet.exe。 IIS 进程与工作进程之间通过命名管道( Named Pipes)进行通信。
在工作进程初始化过程中, .NET 运行时( CLR)被加载进而构建了一个托管的环境。对于某个 Web 应用的初次请求, CLR 会为其创建一个应用程序域( Application Domain)。在应用程序域中, HTTP 运行时( HTTP Runtime)被加载并用以创建相应的应用。寄宿于IIS 5.x 的所有 Web 应用都运行在同一个进程(工作进程 aspnet_wp.exe)的不同应用程序域中。
IIS6处理模型
IIS5中有两个弊端,其一是ISAPI与工作进程分离,会存在性能瓶颈;其二是所有ASP.NET应用程序存在于同一个进程中,应用程序间会存在影响。
针对这两个问题,作了两个改进,引入了应用程序池以及把ISAPI放到工作进程中。
此外IIS6中在系统内核层面引入了HTTP.SYS处理监听HTTP请求。其好处是可以持续监听,更好的稳定性和内核模式下数据缓存。Inetinfo.exe单纯用于存储ISAPI的配置信息,W3SVC则寄宿于另一个进程SvcHost.exe中,其内部职能并没有发生任何变化,功能实现做了改进。
IIS7处理模型
在IIS7中引入了 Windows进程激活服务( Windows Process Activation Service, WAS)的引入,将原来( IIS 6.0) W3SVC承载的部分功能分流给了 WAS。实际上是对监听这一环节开放了可扩展的接口。W3SVC还是存储原有的HTTP请求的监听,但这也成为了它唯一的职责,后续的读取ISAPI信息和工作进程管理那块则移交给WAS。扩展的监听接口看介绍是在WCF方面比较有用,现在暂且不关注它。ISAPI的配置信息也不依赖于原有的Metabase,改用了applicationHost.config。
IIS7的集成模式肯定也要提到,在前面介绍httpHandlers的时候也提到IIS7有经典模式和集成模式。IIS7之前是使用双管道处理Http请求,在IIS中有一堆模块处理(例如身份认证),同样在Http管道中有重复的处理。而在IIS7中新增了集成模式可以使得这两个管道处理变成单一管道统一处理。IIS7中同样保留了双管道的处理模式,称之为经典模式。在经典模式中对扩展的HttpModule和HttpHandler只作用于ISAPI扩展过的这些资源,但对静态资源是没有作用的,假设使用了集成模式,因为是单一管道统一处理,不管动态还是静态都会被httpModule和HttpHandler处理。
上面介绍的几个IIS处理模型都是在HttpRuntime生成前,到了.NET Runtime的范围内,HttpRuntime才开始被创建出来。关于如何被生成,如何被调用鄙人则不想再粘贴代码了。想看的话还是那个链接:舍长的《深入理解ASP.NET的内部运行机制》。
以上都是人云亦云的内容,在经峰哥教导后我觉得这样学习就不踏实了,可惜好像还没有任何有效途径去验证这些说法。至少在MSDN上也还没发现相关内容。
httpRuntime与ASP.NET 运行时及IIS处理模型的更多相关文章
- asp.net 运行时, 报控件不存在
Asp.net 运行时,报控件不存在,但系统中确实加入了控件z, 但是生成网站的时候,报控件不存在,输入代码的时候,this.edtxx.Text 确实可以输入 原因: 系统修改的时候,作了一个备份, ...
- HttpRuntime应用程序的运行时
System.Web.HttpRuntime类是整个Asp.net服务器处理的入口. 这个类提供了一系列的静态属性,反映web应用程序域的设置信息,而且每个web应用程序域中存在一个System.We ...
- asp.net 运行时,"未能映射路径"
asp.net 站点出现:未能映射路径,解决方案之一:发现原来是iis 应用程序池中设置了.net framework 版本为4.0了,而且VS中站点的版本为2.0引起的. 解决方案是把VS 中的站点 ...
- 使用生活实例理解Asp.net运行时
学习编程语言,掌握面向对象的编程思想尤为重要,一旦理解了面向对象的这种概念,那么好些地方拿到生活中去理解,就容易的多了.书本上的枯燥干涩的语言,对于好多人来说,即难懂,更难长时间牢牢记得.但是编程语言 ...
- Asp.Net 学习笔记(IIS不同版本和Asp.Net)
主要目的是在网上记录一下学习笔记,如有不对,请指出 谢谢!! iis5.x: 存在问题,inet info收到动态请求后,aspnt_isapi.dll会被加载到inetinfo.exe(挂载w3sv ...
- 在Linux安装ASP.Net Core的运行时(Runtime)
在部署的时候,如果您不想在您的Linux服务器上安装.Net Core SDK,您可以只安装Runtime,接下来我们看看该如何安装运行时Runtime. 下载运行时文件 下载页面:https://w ...
- HttpRuntime应用程序运行时
System.Web.HttpRuntime类是整个Asp.net服务器处理的入口. 这个类提供了一系列的静态属性,反映web应用程序域的设置信息,而且每个web应用程序域中存在一个System.We ...
- Asp.Net Core--发布到IIS
翻译如下: 支持的操作系统 Windows 7及更高版本 Windows Server 2008 R2及更高版本 概念上,本文档中描述的IIS配置也适用于在Nano Server IIS上托管ASP. ...
- ASP.NET是如何在IIS下工作的
ASP.NET与IIS是紧密联系的,由于IIS6.0与IIS7.0的工作方式的不同,导致ASP.NET的工作原理也发生了相应的变化. IIS6(IIS7的经典模式)与IIS7的集成模式的不同 IIS6 ...
随机推荐
- Visual Studio LightSwitch
LightSwitch是一个基于模板的自动化开发Silverlight和HTML5应用程序的工具,不同于一般的基于数据字典,配置生成的应用程序的工具,因为LightSwtich提供的所有模板都是可以扩 ...
- 简单一招实现json数据可视化
开发一个内部功能时碰到的需求,要把json数据在页面上展示出来,平时浏览器会安装jsonView这样的扩展来看json数据,但是程序要用到的话该怎么办呢?今天在网上搜索的时候,发现了这个小技巧,分享一 ...
- Ubuntu 16 安装ElasticSearch
首先安装Java,参见博客:http://www.cnblogs.com/1zhk/p/6056406.html 下载ElasticSearch安装包 curl -L -O https://artif ...
- Ubuntu 16 安装JDK1.8
检查是否JDK已被安装: 上图表示没有安装,创建文件夹: 下载JDK: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-dow ...
- Thrift架构~目录
回到占占推荐博客索引 概念相关 thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ru ...
- Oracle 创建普通用户,并赋予权限
采用sys or system / manager as sysdba; 连接数据库. 创建普通用户konglin: create user konglin identified by pwd_ora ...
- Transactional Replication2:在Subscriber中,主键列是只读的
在使用Transactional Replication时,Subscriber 被认为是“Read-Only”的 , All data at the Subscriber is “read-only ...
- 无法在“EntityFramework”已存在的情况下创建影像复制该文件的解决方案
问题产生的原因:你项目正在生成中你就打开浏览器预览了,导致这个问题解决方案:右击重新生成项目,等生成后再打开 “/”应用程序中的服务器错误. 无法在“EntityFramework”已存在的情况下创建 ...
- jQuery插件:jqGrid使用(一)
1. Loading Data Load from JavaScript Array BundleConfig.cs using System.Web; using System.Web.Optimi ...
- 解密jQuery内核 样式操作
基础回顾 jQuery里节点样式读取以及设置都是通过.css()这个方法来实现的,本章通一下分解探究下jquery里这部分代码的实现 那么jQuery要处理样式的哪些问题? 先简单回顾下样式操作会遇到 ...