在 Internet 信息服务 (IIS) Web 服务器上配置 ASP.NET 进程模型设置。只能在 Machine.config 文件中设置 <processModel> 节,并且该节影响服务器上运行的所有 ASP.NET 应用程序。
警告 有关此元素的信息,请阅读“注释”部分。
配置结构的示例:
<configuration>
<system.web>
<processModel>
<processModel enable="true|false"
timeout="hrs:mins:secs|Infinite"
idleTimeout="hrs:mins:secs|Infinite"
shutdownTimeout="hrs:mins:secs|Infinite"
requestLimit="hrs:mins:secs|Infinite"
requestQueueLimit="num|Infinite"
restartQueueLimit="num|Infinite"
memoryLimit="percent"
cpuMask="num"
webGarden="true|false"
userName="username"
password="password"
logLevel="All|None|Errors"
clientConnectedCheck="hrs:mins:secs|Infinite"
responseDeadlockInterval="hrs:mins:secs|Infinite"
responseRestartDeadlockInterval="hrs:mins:secs|Infinite"
comAuthenticationLevel="Default|None|Connect|Call|
Pkt|PktIntegrity|PktPrivacy"
comImpersonationLevel="Default|Anonymous|Identify|
Impersonate|Delegate"
maxWorkerThreads="num"
maxIoThreads="num"/>
属性 | 选项 | 描述 |
---|---|---|
clientConnectedCheck | 指定在 ASP.NET 检查连接的客户端之前,请求在队列中存在多长时间。 | |
comAuthenticationLevel | 为 DCOM 安全指定身份验证级别。默认值为 Connect。 | |
Default | 指定 DCOM 使用其正常的安全协商算法来确定身份验证级别。 | |
None | 指定不进行身份验证。 | |
Connect | 指定仅当客户端建立与服务器的关系时,DCOM 才对客户端凭据进行验证。 | |
Call | 指定在每个远程过程调用开始时服务器收到请求的时候,DCOM 对客户端凭据进行验证。 | |
Pkt | 指定 DCOM 验证收到的所有数据是否均来自预期的客户端。数据报传输始终使用 Pkt 身份验证。 | |
PktIntegrity | 指定 DCOM 验证在客户端和服务器之间传输的数据是否未被修改。 | |
PktPrivacy | 指定 DCOM 验证所有先前的级别并加密每个远程过程调用的参数值。 | |
comImpersonationLevel | 指定 COM 安全的身份验证级别。 | |
Default | 指定 DCOM 使用其正常的安全协商算法来确定模拟级别。 | |
Anonymous | 指定客户端对服务器是匿名的。服务器可以模拟客户端,但模拟令牌不包含任何信息。在版本 1.1 中不支持 Anonymous。 | |
Identify | 指定服务器可以获取客户端的标识。服务器可以模拟客户端以进行访问控制列表 (ACL) 检查,但它不能作为客户端访问系统对象。 | |
Impersonate | 指定服务器进程在代表客户端操作时可以模拟客户端的安全上下文。可以使用此级别的模拟来访问本地资源,如文件。在此级别进行模拟时,只能在一个计算机边界传递模拟令牌。 | |
Delegate | 指定服务器进程在代表客户端操作时可以模拟客户端的安全上下文。在使用掩饰代表客户端操作时,服务器进程也可以对外调用其他的服务器。在其他计算机上,服务器可以作为客户使用客户端的安全上下文访问本地和远程资源。在此级别进行模拟时,可以在任意数量的计算机边界传递模拟令牌。 | |
cpuMask | 指定多处理器服务器上的哪些处理器可以运行 ASP.NET 进程。cpuMask 值指定一种位模式,它指示 CPU 可以运行 ASP.NET 线程。例如,cpuMask 十六进制值 0x0d 表示位模式 1101。在具有 4 个 CPU 的计算机上,它指示可以将 ASP.NET 进程安排在 CPU 0、2 和 3,但不能安排在 CPU 1 上。ASP.NET 为每个合格的 CPU 启动一个工作进程。如果将 webGarden 属性(参见下面)设置为 |
|
enable | 指定是否启用进程模型。 | |
true | 指示进程模型已启用。 | |
false | 指示进程模型未启用。 | |
idleTimeout | 指定在 ASP.NET 自动结束工作进程之前,工作进程处于不活动状态的时间(采用时:分:秒字符串格式)。默认设置为 Infinite。 | |
logLevel | 指定要记录到事件日志中的事件类型。 | |
All | 指定记录所有的进程事件。 | |
None | 指定不记录任何事件。 | |
Errors | 指定只记录意外关闭、内存限制关闭和死锁关闭。Errors 为默认值。 | |
maxWorkerThreads | 5 - 100 | 配置每个 CPU 上的进程使用的工作线程的最大数量。例如,如果在单处理器服务器上该值为 25,则 ASP.NET 使用运行时 API 将进程限制设置为 25 个。在双处理器服务器上,将该限制设置为 50。默认值为 20。maxWorkerThreads 的值必须大于或等于 <httpRuntime> 配置节中的 minFreeThread 属性设置。 |
maxIoThreads | 5 - 100 | 配置每个 CPU 上的进程使用的 I/O 线程的最大数量。例如,如果在单处理器服务器上该值为 25,则 ASP.NET 使用运行时 API 将进程限制设置为 25 个。在双处理器服务器上,将该限制设置为 50。默认值为 20。maxIoThreads 的值必须大于或等于 <httpRuntime> 配置节中的 minFreeThread 属性设置。 |
memoryLimit | 指定在 ASP.NET 启动新的进程和重新分配现有请求之前,允许工作进程占用的最大内存大小(总系统内存的百分比)。默认值是 60%。 | |
password | 如果给出(与 userName 结合使用),则此属性导致工作进程以配置的 Windows 标识运行。默认值为 AutoGenerate。有关特殊名称 System 和 Machine(它们不需要密码)的详细信息以及在注册表中存储加密工作进程凭据的信息,请参阅 userName。 | |
pingFrequency | 使用标准进程模型格式(时:分:秒)指定时间间隔,ISAPI 扩展按此间隔 ping 工作进程以查看它是否正在运行。如果工作进程在 pingTimeout 间隔内没有运行,则重新启动该工作进程。默认值为 30 秒钟。 | |
pingTimeout | 使用标准进程模型格式(时:分:秒)指定重新启动未响应工作进程之前的时间间隔。ISAPI 扩展每隔 pingFrequency 时间间隔 ping 一次工作进程。如果工作进程在 pingTimeout 间隔内没有响应,则重新启动该进程。默认值为 5 秒钟。 | |
requestLimit | 指定在 ASP.NET 自动启动新工作进程以替换当前进程之前允许的请求数。默认设置为 Infinite。 | |
requestQueueLimit | 指定在 ASP.NET 开始给新请求返回“503 - 服务器太忙”错误之前队列中允许的请求数。默认值是 5000。 | |
responseDeadlockInterval | 使用标准进程模型格式(时:分:秒)指定重新启动工作进程之前的时间间隔(如果满足以下条件):
默认值为 3 分钟。 |
|
responseRestartDeadlockInterval | ASP.NET 不再使用此属性,并且仅出于向后兼容性的需要提供此属性。如果它已在配置文件中存在,则它不会引起配置错误。现在,出现死锁情况下的所有回收是由 responseDeadlockInterval 属性控制的。 | |
serverErrorMessageFile | 如果给出,则它指定要使用的文件内容,而不是出现致命错误时给出的默认“服务器不可用”消息。文件位置是与 Machine.config 相对的,也可以是绝对文件路径。如果没有给出该属性,则使用默认的“服务器不可用”消息。 | |
shutdownTimeout | 指定工作进程自行关闭前允许的分钟数。当超时到期时,ASP.NET 就会关闭工作进程。时间用时:分:秒字符串格式表示。默认值为 5 秒钟或 0:00:05。 | |
timeout | 指定在 ASP.NET 启动新工作进程以替换当前进程之前的时间(以分钟为单位)。默认设置为 Infinite。 | |
userName | 如果给出,则 userName 属性使用不同于默认进程标识的 Windows 标识运行 ASP.NET 工作进程。默认情况下,将 userName 设置为特殊值 Machine,并且进程运行使用的用户帐户为 ASPNET(在安装 ASP.NET 时自动创建的)。ASPNET 帐户的密码是在安装时以加密形式生成的。如果在 userName 和 password 属性中给出了有效的凭据,则进程使用给定的帐户运行。userName 的另外一个特殊值为 System,密码为 AutoGenerate(它使用管理员帐户来运行进程,并且允许在此进程下运行的所有 ASP.NET 用户代码具有完全管理权限)。有关在用作域控制器的服务器上使用 ASP.NET 的信息,请参阅下面的“注释”部分。
userName 和 password 以明文形式存储在配置文件中。尽管 IIS 将不会为响应用户代理请求而传输 .config 文件,但是可通过其他方法读取配置文件,例如,通过对包含该服务器的域具有正确凭据的经过身份验证的用户访问。为了维护安全性,processModel 节支持在注册表中存储加密的 userName 和 password 属性。凭据必须采用由 Windows 2000 和 Windows XP 数据保护 API (DPAPI) 加密功能加密的 REG_BINARY 格式。详细信息,请参阅下面的“注释”和“示例”部分。 |
|
webGarden | 在与 cpuMask 属性结合使用时控制 CPU 关系。(多处理器 Web 服务器称为“Web 园”。) | |
true | 指示 cpuMask 属性用于指定哪些 CPU 适合运行 ASP.NET 进程。 | |
false | 指示 CPU 的使用是由 Windows 操作系统调度的。忽略 cpuMask 属性并且只运行一个工作进程。默认值是 |
托管代码配置系统并不读取 <processModel> 配置设置。而是由非托管 DLL aspnet_isapi.dll 直接读取。重新启动 IIS 后,本节的更改才会生效。
如果在域控制器上安装 ASP.NET,必须采取特殊的步骤,否则安装无法正常进行。详细信息,请参阅位于 http://support.microsoft.com 的 Microsoft 知识库中的文章 CHS315158“ASP.NET 在域控制器上不能使用默认 ASPNET 帐户”。
当 ASP.NET 在 IIS 版本 6 本机模式下运行时,使用 IIS 6 进程模型并且忽略 <processModel> 节中的设置。要配置进程标识、回收或其他进程模型值,请使用 Internet 服务管理器用户界面为应用程序配置 IIS 工作进程。
时间值的格式为“时:分:秒”。如果只给出单个数字而没有冒号,则假定该值为分钟数;因此 timeout="4" 等同于 timeout="00:04:00"。
如果 ASP.NET 应用程序导致 ASP.NET 工作进程(Windows 2000 和 Windows XP Professional 上的 Aspnet_wp.exe 以及 Windows Server 2003 上的 W3wp.exe)重新启动,并给出一条错误消息,指示重新启动是由于怀疑的死锁状态造成的,则应该增加 responseDeadlockInterval 设置。
在注册表中存储用户名和密码
将用户名和密码存储在注册表中
要加密用户名和密码并将它们存储在注册表中,请按如下方式设置 userName 和 password。
userName="registry:HKLM\Software\AspNetProcess,Name"
password="registry:HKLM\Software\AspNetProcess,Pwd"
关键字 registry 后面、逗号前面的字符串部分表示 ASP.NET 所打开的注册表项的名称。逗号后面的部分包含一个字符串值名,ASP.NET 将从中读取凭据。逗号是必需的,凭据必须存储在 HKLM 配置单元中。如果配置格式有误,则 ASP.NET 将不启动工作进程,并随后出现当前帐户创建失败代码的路径。
凭据必须采用 REG_BINARY 格式,其中包含对 Windows API 函数 CryptProtectData 调用的输出结果。您可以用 ASP.NET设置注册表控制台应用程序 (Aspnet_setreg.exe) 创建加密凭据并将其存储在注册表中,该应用程序使用 CryptProtectData 完成加密。要下载 Aspnet_setreg.exe 以及 Visual C++ 源代码和帮助,请访问网站 www.asp.net 并搜索“aspnet_setreg”。
您应该对存储加密凭据的注册表项配置访问权限,以便只对 Administrators 和 SYSTEM 提供访问。因为该注册表项将由作为 SYSTEM 运行的 ASP.NET 进程读取,您应该设置下列权限:
Administrators:F
SYSTEM:F
CREATOR OWNER:F
ProcessAccount:R
这将提供两道防线来保护数据:
以下示例指定几个 <processModel> 配置设置。
<configuration>
<system.web>
<processModel
enable="true"
timeout="15"
idleTimeout="25"
shutdownTimeout="5"
requestLimit="1000"
requestQueueLimit="500"
responseDeadlockInterval="00:03:00"
responseRestartDeadlockInterval="Infinite"
memoryLimit="20"
webGarden="true"
maxWorkerThreads="25"
maxIoThreads="25"/>
</system.web>
</configuration>
以下示例指定将加密的用户名和密码存储在注册表用户定义的项 AspNetProcess
下面。
<configuration>
<system.web>
<processModel>
userName="registry:HKLM\Software\AspNetProcess,Name"
password="registry:HKLM\Software\AspNetProcess,Pwd"
</processModel>
</system.web>
</configuration>