TransferMode 枚举

定义

指示通道是使用流处理模式还是缓冲模式来传输请求和响应消息。

public enum class TransferMode
public enum TransferMode
type TransferMode = 
Public Enum TransferMode
继承
TransferMode

字段

Buffered 0

对请求和响应消息进行缓冲处理。

Streamed 1

对请求和响应消息进行流式处理。

StreamedRequest 2

对请求消息进行流式处理,对响应消息进行缓冲处理。

StreamedResponse 3

对请求消息进行缓冲处理,对响应消息进行流式处理。

示例

以下示例通过代码将 TcpTransportBindingElement.TransferMode 属性设置为 Streamed

TcpTransportBindingElement transport = new TcpTransportBindingElement();  
transport.TransferMode = TransferMode.Streamed;  
BinaryMessageEncodingBindingElement encoder = new BinaryMessageEncodingBindingElement();  
CustomBinding binding = new CustomBinding(encoder, transport);  

以下示例通过配置将 TcpTransportBindingElement.TransferMode 属性设置为 Streamed

<customBinding>  
    <binding name="streamingBinding">  
        <binaryMessageEncoding />  
            <tcpTransport transferMode="Streamed" />  
     </binding>  
</customBinding>  

注解

Windows Communication Foundation (WCF) 传输支持两种在各个方向传输消息的模式:

  • 缓冲传输将整个消息保留在内存缓冲区中,直到传输完成。

  • 流传输仅会对消息头进行缓冲,并以流形式公开消息正文,也就是,一次只能读取一小部分消息。

将传输模式设置为 Streamed 将在两个方向上启用流通信。 将传输模式设置为 StreamedRequestStreamedResponse 将仅在指示的方向上启用流通信。

流传输消除了对大型内存缓冲区的需要,从而提高了服务的可伸缩性。 更改传输模式是否确实能够提高可伸缩性取决于所传输的消息大小。 当针对大型消息使用流传输而不是缓存传输时,可伸缩性的提高应最为明显。

默认情况下,HTTP、TCP/IP 和命名管道传输协议使用缓冲消息传输。 可以使用在 TransferMode 、 和 NetNamedPipeBinding 系统提供的绑定上BasicHttpBindingNetTcpBinding公开的传输模式属性设置 的值。 例如,NetTcpBinding.TransferMode可以使用 属性在 类上NetTcpBinding设置模式。 也可以在绑定的配置节中进行设置。

对于未公开传输模式属性的绑定,可以在传输的绑定元素上设置传输模式,此后可以将该元素添加到自定义绑定。 例如,创建 HttpTransportBindingElement 并在创建自定义绑定时利用 TransferMode 属性设置传输模式。 也可以在自定义绑定的配置节中设置传输模式。

对于 HTTP 传输,使用缓冲传输还是流传输是在终结点本地决定的。 对于 HTTP 传输,传输模式不会通过连接传播,也不会传播到代理服务器或其他中间方。 设置传输模式不会反映在服务协定的说明中。 在对服务生成一个代理后,可以但不强求为旨在与流传输一起使用的服务编辑配置文件,以设置传输模式。 对于 TCP 和命名管道传输协议,该传输模式将作为策略断言传播。

Streamed使用传输模式会导致 WCF 运行时强制实施一些限制。

  • 在编程模型层,整个流传输中发生的操作最多只能与一个输入和/或输出参数之间具有协定。 该参数对应于整个消息正文,并且必须为 MessageStream 的子类型或实现 IXmlSerializable 接口。 具有某个操作的返回值等效于具有一个输出参数。

  • 某些 WCF 功能(如可靠消息传送和 SOAP 消息级别安全性)依赖于缓冲消息进行传输。 使用这些功能可能减小或消除通过使用流获得的性能好处。 若要保证流传输的安全,请只使用传输级安全,或者使用 WS-Security 声明外加传输安全的混合模式安全。

  • 即使传输模式设置为 Streamed,也总是会对 SOAP 标头进行缓冲。 消息的标头不得超过在各种绑定和绑定元素上公开的 MaxBufferSize 传输配额大小。

将传输模式从 Buffered 更改为 Streamed 还会更改 TCP 和命名管道传输协议的本机通道形状。 对于缓冲传输模式,本机通道形状为 IDuplexSessionChannel。 对于流传输模式,本机通道为 IRequestChannelIReplyChannel。 因此,会话服务协定不能与传输流一起使用。

适用于