TransferMode Перечисление
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Указывает, использует ли канал для передачи сообщений запросов и ответов потоковый режим или режим буферизации.
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
для BasicHttpBindingсистемных привязок , NetTcpBindingи NetNamedPipeBinding с помощью доступных для них свойств режима передачи. Режим можно задать для NetTcpBinding класса , например, с помощью NetTcpBinding.TransferMode свойства . Также это можно сделать и в разделе конфигурации привязки.
Режим передачи для привязок, не предоставляющих свойство режима передачи, может быть задан с помощью элемента привязки транспорта с его последующим добавлением в пользовательскую привязку. Например, создайте элемент привязки HttpTransportBindingElement, а при создании пользовательской привязки задайте режим передачи с помощью свойства TransferMode. Режим передачи также можно задать и в разделе конфигурации пользовательской привязки.
Решение по использованию буферизованной или потоковой передачи для транспортов HTTP является локальным решением конечной точки. Для транспортов HTTP режим передачи не распространяется по соединению, на прокси-серверы или на других посредников. Выбор режима передачи не отражается в описании контракта службы. Чтобы задать режим передачи, после создания прокси-сервера для службы можно изменить файл конфигурации (это разрешено, но не является обязательным) для тех служб, которые планируется использовать с потоковой передачей. Для транспортов TCP и именованного канала режим передачи распространяется в виде утверждения политики.
Streamed
Использование режима передачи приводит к тому, что среда выполнения WCF применяет некоторые ограничения.
Операции, происходящие в потоковом транспорте, могут иметь контракт на уровне модели программирования не более чем с одним входным и/или выходным параметром. Этот параметр соответствует всему тексту сообщения и должен иметь тип Message, являться подтипом Stream или реализовывать интерфейс IXmlSerializable. Наличие возвращаемого значения операции эквивалентно наличию выходного параметра.
Некоторые функции WCF, такие как надежный обмен сообщениями и безопасность на уровне сообщений SOAP, зависят от буферизации сообщений для передачи. Использование этих возможностей может уменьшить или свести до минимума повышение производительности, достигаемое за счет потоковой передачи. Для защиты потокового транспорта следует использовать либо безопасность только на транспортном уровне, либо безопасность в смешанном режиме, которая объединяет требования WS-Security с безопасностью транспорта.
Заголовки SOAP буферизуются всегда, даже если выбран режим передачи
Streamed
. Размер заголовков сообщений не должен превышать размер квоты транспорта MaxBufferSize, которая предоставляется некоторым привязкам и элементам привязки.
Изменение режима передачи с Buffered
на Streamed
также приводит к изменению собственной формы канала для транспортов TCP и именованных каналов. При буферизованной передаче собственная форма канала представлена интерфейсом IDuplexSessionChannel. При потоковой передаче собственные каналы представлены интерфейсами IRequestChannel и IReplyChannel. Вследствие этого контракты сеансовой службы не могут использоваться совместно с потоковой передачей транспорта.