服务器运行时 <serverRuntime>

概述

元素 <serverRuntime> 配置与 Internet Information Services (IIS) 7 服务器运行时相关的以下设置:

  • enabled 属性设置为 true 将配置 IIS 7 以在配置元素的 <serverRuntime> URL 上提供内容;将 enabled 属性设置为 false 会将 IIS 7 配置为不为该 URL 提供内容。

  • alternateHostName 属性指定与 HTTP Content-location 标头中的计算机名称不同的主机名。

  • appConcurrentRequestLimit 属性指定可为应用程序排队的最大并发请求数。

  • enableNagling 属性启用或禁用 nagling,这是针对 TCP 上的 HTTP 的优化,通过尝试在发送数据之前尽量减少所需的数据包数来提高效率。 它的工作原理是等待发送数据包,直到其数据区域已满,直到 200 毫秒的超时期限到期,或直到发送方指示它已完成发送数据。 IIS 5.1 及更早版本对发送到客户端的所有数据使用 nagling。

    注意

    Nagling 有一个可能的缺点:如果扩展未填满数据包,则发送响应之前仍有 200 毫秒的延迟。 在对客户端的响应中使用支持 HTTP keep-alive 标头的 ISAPI 扩展时,最常看到此行为。 在这种情况下,IIS 不会在响应后关闭连接,因此最终数据包将等待 200 毫秒。

  • IIS 7 检查两个属性的状态,以确定特定 URL 的流量级别。 frequentHitThreshold 属性配置请求数,而 frequentHitTimePeriod 属性配置在判断该 URL 经常被命中之前允许的时间量。 编写使用此信息进行处理的 HTTP 模块时,将使用此信息。 有关详细信息,请参阅 IHttpUrlInfo::IsFrequentlyHit 方法 一文。

  • maxRequestEntityAlloweduploadReadAheadSize 属性分别为请求实体正文中允许的最大字节数以及 Web 服务器将读取到缓冲区并传递到 ISAPI 扩展的字节数配置限制。 应考虑到,增加这些值允许最终用户上传对 IIS 运行时内存资源产生影响的更多内容。 建议将这些值保持在与应用程序需求一致的数字,并且仅在极端情况下使用最大值。

IIS 7.5 中的新增功能

IIS 7.5 向 元素添加了 authenticatedUserOverride 属性<serverRuntime>,用于配置 IIS 7 服务器运行时是在 IHttpUser::GetPrimaryToken 和 IHttpUser::GetImpersonationToken 方法中提供经过身份验证的用户标识还是辅助进程标识。 此属性可以设置为 UseAuthenticatedUserUseWorkerProcessUser,这些值分别指定 IIS 7 服务器运行时是否将为使用模拟的任何模块提供经过身份验证的用户标识或辅助进程标识。

兼容性

版本 备注
IIS 10.0 <serverRuntime> IIS 10.0 中未修改元素。
IIS 8.5 <serverRuntime> IIS 8.5 中未修改元素。
IIS 8.0 <serverRuntime> IIS 8.0 中未修改元素。
IIS 7.5 在 IIS 7.5 中添加了 authenticatedUserOverride 属性。
IIS 7.0 IIS <serverRuntime> 7.0 中引入了 元素。
IIS 6.0 元素 <serverRuntime> 替换以下 IIS 6.0 元数据库属性:
  • SetHostName
  • MaxRequestEntityAllowed
  • UploadReadAheadSize

设置

元素 <serverRuntime> 包含在 IIS 7 的默认安装中。

操作方式

没有可用于配置 IIS 7 元素的 <serverRuntime> 用户界面。 有关如何以编程方式配置 <serverRuntime> 元素的示例,请参阅本文档的 代码示例 部分。

配置

属性

属性 说明
alternateHostName 可选的字符串属性。

指定要用于重定向的主机名。
appConcurrentRequestLimit 可选 uint 属性。

指定可为应用程序排队的最大请求数。

默认值为 5000
authenticatedUserOverride 可选枚举属性。

指定 IIS 7 服务器运行时是为使用模拟的模块提供经过身份验证的用户标识还是辅助进程标识。

注意: 已在 IIS 7.5 中添加此属性。
说明
UseAuthenticatedUser 指定 IIS 将提供经过身份验证的用户的令牌;在此上下文中运行的应用程序将限制为经过身份验证的用户标识的任何访问限制。

数值为 1
UseWorkerProcessUser 指定 IIS 将为工作进程标识提供令牌,而不是使用经过身份验证的用户标识;在此上下文中运行的应用程序将被限制为工作进程标识的任何访问限制。

数值为 2
默认值为 UseAuthenticatedUser
enabled 可选的 布尔 属性。

指定 Web 服务器上的应用程序是否能够 (true) 提供内容 (false) 。

默认值为 true
enableNagling 可选的 布尔 属性。

指定是启用导航 (true) 还是禁用 (false) 。

默认值为 false
frequentHitThreshold 可选 uint 属性。

指定必须在 frequentHitTimePeriod 属性中指定的时间跨度内请求 URL 的次数,以被视为频繁命中。 该值必须介于 1 和 2147483647 之间。

默认值为 2
frequentHitTimePeriod 可选 timeSpan 属性。

指定在将 URL 视为频繁命中之前,必须请求 在 frequentHitThreshold 属性中指定的次数的时间间隔。

默认值为 00:00:10 (10 秒) 。
maxRequestEntityAllowed 可选 uint 属性。

指定请求的实体正文中可以包含的最大字节数。 如果 Content-Length 标头指定了更大的数字,IIS 将发送 HTTP 403 错误响应。

默认值为 4294967295 (无限制) 。
uploadReadAheadSize 可选 uint 属性。

指定 Web 服务器将读取到缓冲区并传递给 ISAPI 扩展或模块的字节数。 每个客户端请求会发生这种情况一次。 ISAPI 扩展或模块直接从客户端接收任何其他数据。 该值必须介于 0 和 2147483647 之间。

默认值为 49152

子元素

无。

配置示例

以下配置示例将 <serverRuntime> 元素的 enable 属性设置为 true,然后将 frequentHitThreshold 属性设置为 5 个请求,将 frequentHitTimePeriod 属性设置为 20 秒,将 URL 的请求数配置为“频繁命中”。

<location path="Default Web Site">
   <system.webServer>
      <serverRuntime enabled="true"
         frequentHitThreshold="5"
         frequentHitTimePeriod="00:00:20" />
   </system.webServer>
</location>

代码示例

以下代码示例将 <serverRuntime> 元素的 enable 属性设置为 true,然后将 frequentHitThreshold 属性设置为 5 个请求,将 frequentHitTimePeriod 属性设置为 20 秒,将 URL 的请求数配置为“频繁命中”。

AppCmd.exe

appcmd.exe set config "Default Web Site" -section:system.webServer/serverRuntime /enabled:"True" /commit:apphost
appcmd.exe set config "Default Web Site" -section:system.webServer/serverRuntime /frequentHitThreshold:"5" /commit:apphost
appcmd.exe set config "Default Web Site" -section:system.webServer/serverRuntime /frequentHitTimePeriod:"00:00:20" /commit:apphost

注意

在使用 AppCmd.exe 配置这些设置时,必须确保将 commit 参数设置为 apphost 。 这会将配置设置提交到 ApplicationHost.config 文件中的相应位置部分。

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {
         Configuration config = serverManager.GetApplicationHostConfiguration();

         ConfigurationSection serverRuntimeSection = config.GetSection("system.webServer/serverRuntime", "Default Web Site");
         serverRuntimeSection["enabled"] = true;
         serverRuntimeSection["frequentHitThreshold"] = 5;
         serverRuntimeSection["frequentHitTimePeriod"] = TimeSpan.Parse("00:00:20");

         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample

   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration

      Dim serverRuntimeSection As ConfigurationSection = config.GetSection("system.webServer/serverRuntime", "Default Web Site")
      serverRuntimeSection("enabled") = True
      serverRuntimeSection("frequentHitThreshold") = 5
      serverRuntimeSection("frequentHitTimePeriod") = TimeSpan.Parse("00:00:20")

      serverManager.CommitChanges()
   End Sub

End Module

Javascript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";

var serverRuntimeSection = adminManager.GetAdminSection("system.webServer/serverRuntime", "MACHINE/WEBROOT/APPHOST/Default Web Site");
serverRuntimeSection.Properties.Item("enabled").Value = true;
serverRuntimeSection.Properties.Item("frequentHitThreshold").Value = 5;
serverRuntimeSection.Properties.Item("frequentHitTimePeriod").Value = "00:00:20";

adminManager.CommitChanges();

VBScript

Set adminManager = WScript.CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"

Set serverRuntimeSection = adminManager.GetAdminSection("system.webServer/serverRuntime", "MACHINE/WEBROOT/APPHOST/Default Web Site")
serverRuntimeSection.Properties.Item("enabled").Value = True
serverRuntimeSection.Properties.Item("frequentHitThreshold").Value = 5
serverRuntimeSection.Properties.Item("frequentHitTimePeriod").Value = "00:00:20"

adminManager.CommitChanges()