TransferMode TransferMode TransferMode TransferMode Enum

Определение

Указывает, использует ли канал для передачи сообщений запросов и ответов потоковый режим или режим буферизации.Indicates whether a channel uses streamed or buffered modes for the transfer of request and response messages.

public enum class TransferMode
public enum TransferMode
type TransferMode = 
Public Enum TransferMode
Наследование

Поля

Buffered Buffered Buffered Buffered 0

Сообщения запроса и ответа буферизуются.The request and response messages are both buffered.

Streamed Streamed Streamed Streamed 1

Сообщения запроса и ответа передаются потоком.The request and response messages are both streamed.

StreamedRequest StreamedRequest StreamedRequest StreamedRequest 2

Сообщение запроса передается потоком, а сообщение ответа буферизуется.The request message is streamed and the response message is buffered.

StreamedResponse StreamedResponse StreamedResponse StreamedResponse 3

Сообщение запроса буферизуется, а сообщение ответа передается потоком.The request message is buffered and the response message is streamed.

Примеры

В следующем примере свойству ткптранспортбиндинжелемент. TransferMode присваивается значение Streamed через код:The following example sets the TcpTransportBindingElement.TransferMode property to Streamed through code:

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

В следующем примере свойству ткптранспортбиндинжелемент. TransferMode присваивается значение Streamed через конфигурацию:The following example sets the TcpTransportBindingElement.TransferMode property to Streamed through configuration:

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

Комментарии

Транспорты Windows Communication Foundation (WCF) поддерживают два режима передачи сообщений в каждом направлении:Windows Communication Foundation (WCF) transports support two modes of transferring messages in each direction:

  • При буферизованной передаче все сообщение хранится в буфере памяти до завершения передачи.Buffered transfers hold the entire message in a memory buffer until the transfer is complete.

  • При потоковой передаче заголовки сообщения помещаются в буфер, а текст сообщения передается в виде потока, из которого оно считывается небольшими частями поочередно.Streamed transfers only buffer the message headers and expose the message body as a stream, from which smaller portions can be read at a time.

Если режиму передачи присвоено значение Streamed, потоковая передача будет выполняться в обоих направлениях.Setting the transfer mode to Streamed enables streaming communication in both directions. Если режиму передачи присвоено значение StreamedRequest или StreamedResponse, потоковая передача будет выполняться только в указанном направлении.Setting the transfer mode to StreamedRequest or StreamedResponse enables streaming communication only in the indicated direction.

Потоковая передача позволяет улучшить возможности масштабирования службы за счет исключения необходимости использовать большие буферы памяти.Streamed transfers can improve the scalability of a service by eliminating the need for large memory buffers. Степень улучшения масштабируемости при изменении режима передачи на практике зависит от размера передаваемых сообщений.Whether changing the transfer mode actually improves scalability in practice depends on the size of the messages being transferred. Улучшение масштабируемости наиболее заметно, когда для больших сообщений используется потоковая передача вместо буферизованной.Improvements in scalability should be most evident when large messages use streamed instead of buffered transfers.

По умолчанию транспорты HTTP, TCP/IP и именованных каналов используют буферизованную передачу сообщений.By default, the HTTP, TCP/IP and named pipe transports use buffered message transfers. Можно задать значения TransferMode для привязок BasicHttpBinding, NetTcpBinding и NetNamedPipeBinding, используя для них свойства режима пересылки.You can set the values of TransferMode on the BasicHttpBinding, NetTcpBinding, and NetNamedPipeBinding system-provided bindings using the transfer mode properties exposed on them. Режим можно задать для класса NetTcpBinding, например с помощью свойства NetTcpBinding.TransferMode.The mode can be set on the NetTcpBinding class, for example, by using the NetTcpBinding.TransferMode property. Также это можно сделать и в разделе конфигурации привязки.It can also be set in the configuration section for the binding.

Режим передачи для привязок, не предоставляющих свойство режима передачи, может быть задан с помощью элемента привязки транспорта с его последующим добавлением в пользовательскую привязку.For bindings that do not expose the transfer mode property, the transfer mode can be set on the binding element of the transport and this element can then be added to a custom binding. Например, создайте элемент привязки HttpTransportBindingElement, а при создании пользовательской привязки задайте режим передачи с помощью свойства TransferMode.For example, create an HttpTransportBindingElement and use the TransferMode property to set the transfer mode when creating a custom binding. Режим передачи также можно задать и в разделе конфигурации пользовательской привязки.The transfer mode can also be set in the configuration section for the custom binding.

Решение по использованию буферизованной или потоковой передачи для транспортов HTTP является локальным решением конечной точки.The decision to use either buffered or streamed transfers is a local decision of the endpoint for HTTP transports. Для транспортов HTTP режим передачи не распространяется по соединению, на прокси-серверы или на других посредников.For HTTP transports, the transfer mode does not propagate across a connection, or to proxy servers or other intermediaries. Выбор режима передачи не отражается в описании контракта службы.Setting the transfer mode is not reflected in the description of the service contract. Чтобы задать режим передачи, после создания прокси-сервера для службы можно изменить файл конфигурации (это разрешено, но не является обязательным) для тех служб, которые планируется использовать с потоковой передачей.After generating a proxy to a service, you can (it is allowed but not required) edit the configuration file for services intended to be used with streamed transfers to set the transfer mode. Для транспортов TCP и именованного канала режим передачи распространяется в виде утверждения политики.For TCP and named pipe transports, the transfer mode is propagated as a policy assertion.

Использование режима преобразования Streamed заставляет среду выполнения WCF применять некоторые ограничения.Using the Streamed transfer mode causes the WCF runtime to enforce some restrictions.

  • Операции, происходящие в потоковом транспорте, могут иметь контракт на уровне модели программирования не более чем с одним входным и/или выходным параметром.Operations that occur across a streamed transport can have a contract with at most one input and/or one output parameter at the programming model layer. Этот параметр соответствует всему тексту сообщения и должен иметь тип Message, являться подтипом Stream или реализовывать интерфейс IXmlSerializable.That parameter corresponds to the entire body of the message and must be a Message, be a subtype of Stream, or implement the IXmlSerializable interface. Наличие возвращаемого значения операции эквивалентно наличию выходного параметра.Having a return value for an operation is equivalent to having an output parameter.

  • Некоторые функции WCF, такие как надежный обмен сообщениями и безопасность на уровне сообщений SOAP, зависят от буферизации сообщений для передачи.Some WCF features such as Reliable Messaging and SOAP message-level security rely on buffering messages for transmissions. Использование этих возможностей может уменьшить или свести до минимума повышение производительности, достигаемое за счет потоковой передачи.Using these features may reduce or eliminate the performance benefits gained by using streaming. Для защиты потокового транспорта следует использовать либо безопасность только на транспортном уровне, либо безопасность в смешанном режиме, которая объединяет требования WS-Security с безопасностью транспорта.To secure a streamed transport, use transport level security only or use mixed-mode security, which combines WS-Security claims with transport security.

  • Заголовки SOAP буферизуются всегда, даже если выбран режим передачи Streamed.SOAP headers are always buffered, even when the transfer mode is set to Streamed. Размер заголовков сообщений не должен превышать размер квоты транспорта MaxBufferSize, которая предоставляется некоторым привязкам и элементам привязки.The headers for a message must not exceed the size of the MaxBufferSize transport quota which is exposed on the various bindings and binding elements.

Изменение режима передачи с Buffered на Streamed также приводит к изменению собственной формы канала для транспортов TCP и именованных каналов.Changing the transfer mode from Buffered to Streamed also changes the native channel shape of the TCP and named pipe transports. При буферизованной передаче собственная форма канала представлена интерфейсом IDuplexSessionChannel.For buffered transfers, the native channel shape is IDuplexSessionChannel. При потоковой передаче собственные каналы представлены интерфейсами IRequestChannel и IReplyChannel.For streamed transfers, the native channels are IRequestChannel and IReplyChannel. Вследствие этого контракты сеансовой службы не могут использоваться совместно с потоковой передачей транспорта.A consequence of this is that sessionful service contracts cannot be used with transport streaming.

Применяется к