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