TransferMode Wyliczenie

Definicja

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
TransferMode

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 Streamedwartość . 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.

Dotyczy