TransferMode Wyliczenie
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Wskazuje, czy kanał używa trybów przesyłanych strumieniowo lub buforowanych na potrzeby transferu komunikatów żądania i odpowiedzi.
public enum class TransferMode
public enum TransferMode
type TransferMode =
Public Enum TransferMode
- Dziedziczenie
Pola
Buffered | 0 | Komunikaty żądania i odpowiedzi są buforowane. |
Streamed | 1 | Żądania i komunikaty odpowiedzi są przesyłane strumieniowo. |
StreamedRequest | 2 | Komunikat żądania jest przesyłany strumieniowo, a komunikat odpowiedzi jest buforowany. |
StreamedResponse | 3 | Komunikat żądania jest buforowany, a komunikat odpowiedzi jest przesyłany strumieniowo. |
Przykłady
Poniższy przykład ustawia właściwość TcpTransportBindingElement.TransferMode na Streamed
za pomocą kodu:
TcpTransportBindingElement transport = new TcpTransportBindingElement();
transport.TransferMode = TransferMode.Streamed;
BinaryMessageEncodingBindingElement encoder = new BinaryMessageEncodingBindingElement();
CustomBinding binding = new CustomBinding(encoder, transport);
Poniższy przykład ustawia właściwość TcpTransportBindingElement.TransferMode na Streamed
za pomocą konfiguracji:
<customBinding>
<binding name="streamingBinding">
<binaryMessageEncoding />
<tcpTransport transferMode="Streamed" />
</binding>
</customBinding>
Uwagi
transporty Windows Communication Foundation (WCF) obsługują dwa sposoby przesyłania komunikatów w każdym kierunku:
Buforowane transfery przechowują cały komunikat w buforze pamięci do momentu zakończenia transferu.
Przesyłanie strumieniowe buforuje tylko nagłówki komunikatów i uwidacznia treść komunikatu jako strumień, z którego można odczytywać mniejsze części naraz.
Ustawienie trybu transferu w celu Streamed
włączenia komunikacji strumieniowej w obu kierunkach. Ustawienie trybu transferu na StreamedRequest
lub StreamedResponse
włączenie komunikacji przesyłanej strumieniowo tylko w określonym kierunku.
Transfery przesyłane strumieniowo mogą zwiększyć skalowalność usługi, eliminując potrzebę dużych buforów pamięci. Niezależnie od tego, czy zmiana trybu transferu rzeczywiście poprawia skalowalność w praktyce, zależy od rozmiaru przesyłanych komunikatów. Ulepszenia skalowalności powinny być najbardziej widoczne, gdy duże komunikaty używają strumieniowo zamiast buforowanych transferów.
Domyślnie protokół HTTP, TCP/IP i nazwane transporty potoków używają buforowanych transferów komunikatów. Można ustawić wartości w TransferMode
BasicHttpBindingNetTcpBindingpowiązaniach , i NetNamedPipeBinding udostępnionych przez system przy użyciu właściwości trybu transferu uwidocznionych na nich. Tryb można ustawić w NetTcpBinding klasie, na przykład przy użyciu NetTcpBinding.TransferMode właściwości . Można go również ustawić w sekcji konfiguracji powiązania.
W przypadku powiązań, które nie uwidaczniają właściwości trybu transferu, tryb transferu można ustawić na element powiązania transportu, a ten element można następnie dodać do powiązania niestandardowego. Na przykład utwórz HttpTransportBindingElement właściwość i użyj TransferMode jej do ustawienia trybu transferu podczas tworzenia powiązania niestandardowego. Tryb transferu można również ustawić w sekcji konfiguracji powiązania niestandardowego.
Decyzja o użyciu buforowanych lub przesyłanych strumieniowo transferów jest lokalną decyzją punktu końcowego dla transportu HTTP. W przypadku transportu HTTP tryb transferu nie jest propagowany przez połączenie ani do serwerów proxy ani innych pośredników. Ustawienie trybu transferu nie jest odzwierciedlone w opisie umowy usługi. Po wygenerowaniu serwera proxy do usługi można (ale nie jest to wymagane) edytować plik konfiguracji usług przeznaczonych do użycia z transferami strumieniowymi w celu ustawienia trybu transferu. W przypadku transportu tcp i nazwanych potoków tryb transferu jest propagowany jako asercji zasad.
Streamed
Użycie trybu transferu powoduje, że środowisko uruchomieniowe programu WCF wymusza pewne ograniczenia.
Operacje wykonywane w strumieniowym transporcie mogą mieć kontrakt z co najwyżej jednym parametrem wejściowym i/lub jednym parametrem wyjściowym w warstwie modelu programowania. Ten parametr odpowiada całej treści komunikatu i musi być podtypem MessageStream, lub zaimplementować IXmlSerializable interfejs. Posiadanie wartości zwracanej dla operacji jest równoważne z parametrem wyjściowym.
Niektóre funkcje programu WCF, takie jak Reliable Messaging i zabezpieczenia na poziomie komunikatów protokołu SOAP, polegają na buforowaniu komunikatów na potrzeby transmisji. Korzystanie z tych funkcji może zmniejszyć lub wyeliminować korzyści z wydajności uzyskane przy użyciu przesyłania strumieniowego. Aby zabezpieczyć strumień transportu, należy użyć tylko zabezpieczeń na poziomie transportu lub użyć zabezpieczeń w trybie mieszanym, co łączy WS-Security oświadczenia z zabezpieczeniami transportu.
Nagłówki protokołu SOAP są zawsze buforowane, nawet jeśli tryb transferu jest ustawiony na
Streamed
wartość . Nagłówki komunikatu nie mogą przekraczać rozmiaru limitu przydziału transportu MaxBufferSize widocznego na różnych powiązaniach i elementach powiązania.
Zmiana trybu transferu z Buffered
na Streamed
powoduje również zmianę kształtu kanału natywnego protokołu TCP i nazwanych transportów potoków. W przypadku buforowanych transferów kształt kanału natywnego to IDuplexSessionChannel. W przypadku przesyłanych strumieniowo kanały natywne to IRequestChannel i IReplyChannel. Konsekwencją tego jest to, że nie można używać kontraktów usług sesji z przesyłaniem strumieniowym transportu.