传输配额

传输配额是一种策略机制,用于确定连接何时消耗过多的资源。 配额是硬性限制,在超出配额值后,可防止使用其他资源。 传输配额可防止恶意或无意拒绝服务攻击。

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 用于流数据的缓冲区的最大大小(以字节为单位)。 如果未设置此传输配额,或者传输未使用流式传输,则配额值为MaxReceivedMessageSizeMaxValue配额值中较小的一个。
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 分钟 在传输引发异常之前等待写操作完成的最长时间。

当通过绑定或配置来设置时,运输配额 MaxPendingConnectionsMaxOutboundConnectionsPerEndpoint 会合并为一个称为 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
  1. MaxBufferSize 传输配额仅在 BasicHttp 绑定上可用。 绑定 WSHttp 适用于不支持流传输模式的方案。

  2. 传输配额 MaxPendingConnectionsMaxOutboundConnectionsPerEndpoint 被合并成一个名为 MaxConnections 的单个传输配额。

通过配置控制传输配额

应用程序配置可以设置与直接访问绑定上的属性相同的传输配额。 在配置文件中,传输配额的名称始终以小写字母开头。 例如, CloseTimeout 绑定上的属性对应于 closeTimeout 配置中的设置,绑定 MaxConnections 上的属性对应于 maxConnections 配置中的设置。

另请参阅