传输配额是一种策略机制,用于确定连接何时消耗过多的资源。 配额是硬性限制,在超出配额值后,可防止使用其他资源。 传输配额可防止恶意或无意拒绝服务攻击。
Windows Communication Foundation (WCF)传输机制具有根据资源的保守分配设定的默认的配额值。 这些默认值适用于开发环境和小型安装方案。 如果安装资源不足或连接受限,尽管还有其他资源可用,服务管理员仍应查看传输配额,并调整单个配额值。
运输配额的类型
WCF 传输具有三种类型的配额:
超时可减少通过长时间占用资源来实施的拒绝服务攻击。
内存分配限制 可防止单个连接耗尽系统内存,并拒绝服务到其他连接。
集合大小限制 限制间接分配内存或供不应求的资源消耗。
传输配额说明
本部分介绍可用于标准 WCF 传输的传输配额:HTTP(S)、TCP/IP 和命名管道。 自定义传输可以公开它们自己的、未包含在此列表中的可配置配额。 若要了解自定义传输的配额,请参考自定义传输的文档。
每个配额设置都有一个类型、最小值和默认值。 配额的最大值受其类型限制。 由于计算机限制,并不总是可以将配额设置为其最大值。
名称 | 类型 | 最小值。 价值 |
违约 价值 |
DESCRIPTION |
---|---|---|---|---|
ChannelInitializationTimeout |
TimeSpan | 1 个计时周期 | 5 秒 | 初始读取过程中等待连接发送前导码的最长时间。 在进行身份验证之前收到此数据。 此设置通常比 ReceiveTimeout 配额值小得多。 |
CloseTimeout |
TimeSpan | 0 | 1 分钟 | 在传输引发异常之前等待连接关闭的最长时间。 |
ConnectionBufferSize |
整数 | 1 | 8 KB | 基础传输的传输和接收缓冲区的大小(以字节为单位)。 增加缓冲区大小可以提高发送大型消息时的吞吐量。 |
IdleTimeout |
TimeSpan | 0 | 2 分钟 | 在关闭之前,共用连接可以保持空闲状态的最长时间。 此设置仅适用于共用连接。 |
LeaseTimeout |
TimeSpan | 0 | 5 分钟 | 已入池的活动连接的最长生存期。 指定时间过后,连接在服务当前请求后关闭。 此设置仅适用于共用连接。 |
ListenBacklog |
整数 | 1 | 10 | 在通往该终结点的其他连接被拒绝之前,侦听器可以拥有的尚未得到服务的连接的最大数量。 |
MaxBufferPoolSize |
长整型 | 0 | 512 KB | 传输用于形成可重用消息缓冲池的最大内存(以字节为单位)。 当池无法提供消息缓冲区时,将为临时使用分配一个新缓冲区。 创建多个通道工厂或侦听器的安装可以为缓冲池分配大量的内存。 减少此缓冲区大小可以大大减少此方案中的内存使用量。 |
MaxBufferSize |
整数 | 1 | 64 KB | 用于流数据的缓冲区的最大大小(以字节为单位)。 如果未设置此传输配额,或者传输未使用流式传输,则配额值为MaxReceivedMessageSize 和MaxValue配额值中较小的一个。 |
MaxOutboundConnectionsPerEndpoint |
整数 | 1 | 10 | 可以与特定终结点相关联的传出连接的最大数量。 此设置仅适用于共用连接。 |
MaxOutputDelay |
TimeSpan | 0 | 200 毫秒 | 在发送操作后,为在单个操作中批处理其他消息所等待的最长时间。 如果基础传输的缓冲区已满,则提前发送消息。 发送其他消息不会重置延迟期。 |
MaxPendingAccepts |
整数 | 1 | 1 | 侦听器可拥有并等待的最大通道接受数。 接受完成和新的接受开始之间存在时间间隔。 增加此集合大小可以防止在此时间间隔内连接的客户端被删除。 |
MaxPendingConnections |
整数 | 1 | 10 | 侦听器可以拥有的正在等待应用程序接受的最大连接数。 超过此配额值后,将拒绝新的传入连接,而不是等待接受。 连接功能(如消息安全性)可能会导致客户端打开多个连接。 设置此配额值时,服务管理员应考虑这些附加连接。 |
MaxReceivedMessageSize |
长整型 | 1 | 64 KB | 传输引发异常之前收到的消息(包括标头)的最大大小(以字节为单位)。 |
OpenTimeout |
TimeSpan | 0 | 1 分钟 | 在传输引发异常之前等待建立连接的最长时间。 |
ReceiveTimeout |
TimeSpan | 0 | 10 分钟 | 在传输引发异常之前等待读取操作完成的最长时间。 |
SendTimeout |
时间跨度 | 0 | 1 分钟 | 在传输引发异常之前等待写操作完成的最长时间。 |
当通过绑定或配置来设置时,运输配额 MaxPendingConnections
和 MaxOutboundConnectionsPerEndpoint
会合并为一个称为 MaxConnections
的单一运输配额。 只有绑定元素才允许单独设置这些配额值。
MaxConnections
传输配额具有相同的最小值和默认值。
设置传输配额
传输配额是通过传输绑定元素、传输绑定、应用程序配置或主机策略设置的。 本文档不介绍如何通过主机策略设置传输。 请查看基础传输的文档,以了解主机策略配额设置。 配置 HTTP 和 HTTPS 主题介绍了 Http.sys 驱动程序的配额设置。 在Microsoft知识库中搜索有关配置 HTTP、TCP/IP 和命名管道连接的 Windows 限制的详细信息。
其他类型的配额间接适用于运输。 传输用于将消息转换为字节的消息编码器可以有自己的配额设置。 但是,这些配额与所使用的传输类型无关。
通过绑定元素控制传输配额
通过绑定元素设置传输配额可提供控制传输行为的最大灵活性。 生成通道时,关闭、打开、接收和发送操作的默认超时将从绑定中获取。
名称 | HTTP | TCP/IP | 命名管道 |
---|---|---|---|
ChannelInitializationTimeout |
X | X | |
CloseTimeout |
|||
ConnectionBufferSize |
X | X | |
IdleTimeout |
X | X | |
LeaseTimeout |
X | ||
ListenBacklog |
X | ||
MaxBufferPoolSize |
X | X | X |
MaxBufferSize |
X | X | X |
MaxOutboundConnectionsPerEndpoint |
X | X | |
MaxOutputDelay |
X | X | |
MaxPendingAccepts |
X | X | |
MaxPendingConnections |
X | X | |
MaxReceivedMessageSize |
X | X | X |
OpenTimeout |
|||
ReceiveTimeout |
|||
SendTimeout |
通过绑定控制传输配额
通过绑定设置传输配额提供了一组简化的配额可供选择,同时仍提供对最常见配额值的访问权限。
名称 | HTTP | TCP/IP | 命名管道 |
---|---|---|---|
ChannelInitializationTimeout |
|||
CloseTimeout |
X | X | X |
ConnectionBufferSize |
|||
IdleTimeout |
|||
LeaseTimeout |
|||
ListenBacklog |
X | ||
MaxBufferPoolSize |
X | X | X |
MaxBufferSize |
1 | X | X |
MaxOutboundConnectionsPerEndpoint |
2 | 2 | |
MaxOutputDelay |
|||
MaxPendingAccepts |
|||
MaxPendingConnections |
2 | 2 | |
MaxReceivedMessageSize |
X | X | X |
OpenTimeout |
X | X | X |
ReceiveTimeout |
X | X | X |
SendTimeout |
X | X | X |
MaxBufferSize
传输配额仅在BasicHttp
绑定上可用。 绑定WSHttp
适用于不支持流传输模式的方案。传输配额
MaxPendingConnections
和MaxOutboundConnectionsPerEndpoint
被合并成一个名为MaxConnections
的单个传输配额。
通过配置控制传输配额
应用程序配置可以设置与直接访问绑定上的属性相同的传输配额。 在配置文件中,传输配额的名称始终以小写字母开头。 例如, CloseTimeout
绑定上的属性对应于 closeTimeout
配置中的设置,绑定 MaxConnections
上的属性对应于 maxConnections
配置中的设置。