httpRuntime与ASP.NET 运行时及IIS处理模型

  配置 ASP.NET HTTP 运行时设置,以确定如何处理对 ASP.NET 应用程序的请求,配置节及其描述如下所示。

  <httpruntime< p="">

  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 )的不同应用程序域中。