Server Runtime <serverRuntime>
Overview
The <serverRuntime>
element configures the following settings that are related to the Internet Information Services (IIS) 7 server runtime:
Setting the enabled attribute to true will configure IIS 7 to serve content on the URL where the
<serverRuntime>
element is configured; setting the enabled attribute to false will configure IIS 7 to not serve content for that URL.The alternateHostName attribute specifies a host name that is different from the computer name in the HTTP Content-location header.
The appConcurrentRequestLimit attribute specifies the maximum number of concurrent requests that can be queued for an application.
The enableNagling attribute enables or disables nagling, which is an optimization for HTTP over TCP that increases efficiency by trying to minimize the number of packets that are required before data is sent . It works by waiting to send a packet until its data area is full, until a 200-millisecond time-out period expires, or until the sender indicates that it is finished sending data. IIS versions 5.1 and earlier use nagling for all data sent to the client.
Note
Nagling has a possible disadvantage; if an extension does not fill up the packet, there is still a delay of 200 milliseconds before the response is sent. This behavior is seen most often when you use ISAPI extensions that support an HTTP keep-alive header in the response to the client. In this case, IIS does not close the connection after the response, so the final packet ends up waiting for 200 milliseconds.
IIS 7 checks the status of two attributes to determine the traffic level for a particular URL. The frequentHitThreshold attribute configures the number of requests and the frequentHitTimePeriod attribute configures the amount of time allowed before that URL is judged to be frequently hit. This information is used when writing HTTP modules that use this information for processing. For more information, see the IHttpUrlInfo::IsFrequentlyHit Method article.
The maxRequestEntityAllowed and uploadReadAheadSize attributes respectively configure limits for the maximum number of bytes allowed in the entity body of a request and the number of bytes a Web server will read into a buffer and pass to an ISAPI extension. It should be taken into consideration that increasing these values allows the end user to upload more content which can have an effect on IIS runtime memory resources. It is recommended to keep these values at a number consistent with application needs, and only in extreme circumstances use the maximum value.
New in IIS 7.5
IIS 7.5 added the authenticatedUserOverride attribute to the <serverRuntime>
element, which configures whether the IIS 7 server runtime will provide the authenticated user's identity or the worker process identity in the IHttpUser::GetPrimaryToken and IHttpUser::GetImpersonationToken methods. This attribute can be set to UseAuthenticatedUser or UseWorkerProcessUser, and these values respectively specify whether the IIS 7 server runtime will provide the authenticated user's identity or the worker process identity for any module that is using impersonation.
Compatibility
Version | Notes |
---|---|
IIS 10.0 | The <serverRuntime> element was not modified in IIS 10.0. |
IIS 8.5 | The <serverRuntime> element was not modified in IIS 8.5. |
IIS 8.0 | The <serverRuntime> element was not modified in IIS 8.0. |
IIS 7.5 | The authenticatedUserOverride attribute was added in IIS 7.5. |
IIS 7.0 | The <serverRuntime> element was introduced in IIS 7.0. |
IIS 6.0 | The <serverRuntime> element replaces the following IIS 6.0 metabase properties:
|
Setup
The <serverRuntime>
element is included in the default installation of IIS 7.
How To
There is no user interface that lets you configure the <serverRuntime>
element for IIS 7. For examples of how to configure the <serverRuntime>
element programmatically, see the Code Samples section of this document.
Configuration
Attributes
Attribute | Description | ||||||
---|---|---|---|---|---|---|---|
alternateHostName |
Optional string attribute. Specifies the host name to use for redirection. |
||||||
appConcurrentRequestLimit |
Optional uint attribute. Specifies the maximum number of requests that can be queued for an application. The default value is 5000 . |
||||||
authenticatedUserOverride |
Optional enum attribute. Specifies whether the IIS 7 server runtime will provide the authenticated user's identity or the worker process identity for modules that are using impersonation. Note: This attribute was added in IIS 7.5.
UseAuthenticatedUser . |
||||||
enabled |
Optional Boolean attribute. Specifies whether applications on the Web server are able to serve content (true) or not are not able to serve content (false). The default value is true . |
||||||
enableNagling |
Optional Boolean attribute. Specifies whether nagling is enabled (true) or disabled (false). The default value is false . |
||||||
frequentHitThreshold |
Optional uint attribute. Specifies the number of times a URL must be requested, within the time span specified in the frequentHitTimePeriod attribute, to be considered frequently hit. The value must be between 1 and 2147483647. The default value is 2 . |
||||||
frequentHitTimePeriod |
Optional timeSpan attribute. Specifies the time interval in which a URL must be requested the number of times specified in the frequentHitThreshold attribute before it is considered to be frequently hit. The default value is 00:00:10 (10 seconds). |
||||||
maxRequestEntityAllowed |
Optional uint attribute. Specifies the maximum number of bytes that can be in an entity body of a request. If the Content-Length header specifies a larger number, IIS sends an HTTP 403 error response. The default value is 4294967295 (unlimited). |
||||||
uploadReadAheadSize |
Optional uint attribute. Specifies the number of bytes that a Web server will read into a buffer and pass to an ISAPI extension or module. This occurs once per client request. The ISAPI extension or module receives any additional data directly from the client. The value must be between 0 and 2147483647. The default value is 49152 . |
Child Elements
None.
Configuration Sample
The following configuration sample sets the <serverRuntime>
element's enable attribute to true, then configures the number of requests for a URL to be considered "frequently hit" by setting the frequentHitThreshold attribute to 5 requests and the frequentHitTimePeriod attribute to 20 seconds.
<location path="Default Web Site">
<system.webServer>
<serverRuntime enabled="true"
frequentHitThreshold="5"
frequentHitTimePeriod="00:00:20" />
</system.webServer>
</location>
Sample Code
The following code samples set the <serverRuntime>
element's enable attribute to true, then configure the number of requests for a URL to be considered "frequently hit" by setting the frequentHitThreshold attribute to 5 requests and the frequentHitTimePeriod attribute to 20 seconds.
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
Note
You must be sure to set the commit parameter to apphost
when you use AppCmd.exe to configure these settings. This commits the configuration settings to the appropriate location section in the ApplicationHost.config file.
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()