TransferMode 枚举
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
指示通道是使用流处理模式还是缓冲模式来传输请求和响应消息。
public enum class TransferMode
public enum TransferMode
type TransferMode =
Public Enum 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
将在两个方向上启用流通信。 将传输模式设置为 StreamedRequest
或 StreamedResponse
将仅在指示的方向上启用流通信。
流传输消除了对大型内存缓冲区的需要,从而提高了服务的可伸缩性。 更改传输模式是否确实能够提高可伸缩性取决于所传输的消息大小。 当针对大型消息使用流传输而不是缓存传输时,可伸缩性的提高应最为明显。
默认情况下,HTTP、TCP/IP 和命名管道传输协议使用缓冲消息传输。 可以使用在 TransferMode
、 和 NetNamedPipeBinding 系统提供的绑定上BasicHttpBindingNetTcpBinding公开的传输模式属性设置 的值。 例如,NetTcpBinding.TransferMode可以使用 属性在 类上NetTcpBinding设置模式。 也可以在绑定的配置节中进行设置。
对于未公开传输模式属性的绑定,可以在传输的绑定元素上设置传输模式,此后可以将该元素添加到自定义绑定。 例如,创建 HttpTransportBindingElement 并在创建自定义绑定时利用 TransferMode 属性设置传输模式。 也可以在自定义绑定的配置节中设置传输模式。
对于 HTTP 传输,使用缓冲传输还是流传输是在终结点本地决定的。 对于 HTTP 传输,传输模式不会通过连接传播,也不会传播到代理服务器或其他中间方。 设置传输模式不会反映在服务协定的说明中。 在对服务生成一个代理后,可以但不强求为旨在与流传输一起使用的服务编辑配置文件,以设置传输模式。 对于 TCP 和命名管道传输协议,该传输模式将作为策略断言传播。
Streamed
使用传输模式会导致 WCF 运行时强制实施一些限制。
在编程模型层,整个流传输中发生的操作最多只能与一个输入和/或输出参数之间具有协定。 该参数对应于整个消息正文,并且必须为 Message、Stream 的子类型或实现 IXmlSerializable 接口。 具有某个操作的返回值等效于具有一个输出参数。
某些 WCF 功能(如可靠消息传送和 SOAP 消息级别安全性)依赖于缓冲消息进行传输。 使用这些功能可能减小或消除通过使用流获得的性能好处。 若要保证流传输的安全,请只使用传输级安全,或者使用 WS-Security 声明外加传输安全的混合模式安全。
即使传输模式设置为
Streamed
,也总是会对 SOAP 标头进行缓冲。 消息的标头不得超过在各种绑定和绑定元素上公开的 MaxBufferSize 传输配额大小。
将传输模式从 Buffered
更改为 Streamed
还会更改 TCP 和命名管道传输协议的本机通道形状。 对于缓冲传输模式,本机通道形状为 IDuplexSessionChannel。 对于流传输模式,本机通道为 IRequestChannel 和 IReplyChannel。 因此,会话服务协定不能与传输流一起使用。