TransferMode TransferMode TransferMode TransferMode Enum

Definition

Gibt an, ob ein Kanal den Stream- oder Puffermodus für die Übertragung von Anforderungs- und Antwortnachrichten verwendet.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
Vererbung

Felder

Buffered Buffered Buffered Buffered 0

Die Anforderungs- und Antwortnachrichten werden gepuffert.The request and response messages are both buffered.

Streamed Streamed Streamed Streamed 1

Die Anforderungs- und Antwortnachrichten werden per Stream übertragen.The request and response messages are both streamed.

StreamedRequest StreamedRequest StreamedRequest StreamedRequest 2

Die Anforderungsnachricht wird per Stream übertragen, und die Antwortnachricht wird gepuffert.The request message is streamed and the response message is buffered.

StreamedResponse StreamedResponse StreamedResponse StreamedResponse 3

Die Anforderungsnachricht wird gepuffert, und die Antwortnachricht wird per Stream übertragen.The request message is buffered and the response message is streamed.

Beispiele

Das folgende Codebeispiel zeigt die Einstellung der TransferMode Eigenschaft Streamed mithilfe von Code:The following code sample shows setting the TransferMode property to Streamed through code:

C#c#

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

Das folgende Beispiel zeigt Streamed Eigenschaft Streamed durch Konfiguration:The following sample shows Streamed property to Streamed through configuration:

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

Hinweise

Windows Communication Foundation (WCF)-Transporte unterstützen zwei Modi zum Übertragen von Nachrichten in jeder Richtung:Windows Communication Foundation (WCF) transports support two modes of transferring messages in each direction:

  • Bei gepufferten Übertragungen wird die gesamte Nachricht in einem Puffer zwischengespeichert, bis die Übertragung abgeschlossen ist.Buffered transfers hold the entire message in a memory buffer until the transfer is complete.

  • Bei Stream-Übertragungen werden lediglich die Nachrichtenheader gepuffert, und der Nachrichtentext wird als Stream verfügbar gemacht, aus dem jeweils kleinere Bestandteile gelesen werden können.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.

Festlegen des Übertragungsmodus auf Streamed ermöglicht kommunikationsstream in beide Richtungen.Setting the transfer mode to Streamed enables streaming communication in both directions. Festlegen des Übertragungsmodus StreamedRequest oder StreamedResponse ermöglicht kommunikationsstream nur in der angegebenen Richtung.Setting the transfer mode to StreamedRequest or StreamedResponse enables streaming communication only in the indicated direction.

Stream-Übertragungen können die Skalierbarkeit eines Dienstes verbessern, indem sie große Speicherpuffer überflüssig machen.Streamed transfers can improve the scalability of a service by eliminating the need for large memory buffers. Ob die Änderung des Übertragungsmodus die Skalierbarkeit tatsächlich verbessert, hängt von der Größe der übertragenen Nachrichten ab.Whether changing the transfer mode actually improves scalability in practice depends on the size of the messages being transferred. Verbesserungen der Skalierbarkeit sollten am deutlichsten zutage treten, wenn große Nachrichten Stream-Übertragungen anstelle gepufferter Übertragungen verwenden.Improvements in scalability should be most evident when large messages use streamed instead of buffered transfers.

Standardmäßig verwenden HTTP, TCP/IP sowie Named Pipe-Transporte gepufferte Nachrichtenübertragungen.By default, the HTTP, TCP/IP and named pipe transports use buffered message transfers. Sie können die Werte von Streamed in den vom System bereitgestellten BasicHttpBinding, NetTcpBinding, NetNamedPipeBinding Bindungen mit den verfügbaren Übertragungsmoduseigenschaften festlegen.You can set the values of Streamed on the BasicHttpBinding, NetTcpBinding, NetNamedPipeBinding system-provided bindings using the transfer mode properties exposed on them. Der Modus kann in der NetTcpBinding beispielsweise mit der TransferMode-Eigenschaft festgelegt werden.The mode can be set on the NetTcpBinding, for example, by using the TransferMode property. Er kann auch im Konfigurationsabschnitt für die Bindung festgelegt werden.It can also be set in the configuration section for the binding.

Für Bindungen, die die Übertragungsmoduseigenschaft nicht verfügbar machen, kann der Übertragungsmodus im Bindungselement des Transports festgelegt werden, und dieses Element kann anschließend einer benutzerdefinierten Bindung hinzugefügt werden.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. Erstellen Sie beispielsweise ein HttpTransportBindingElement, und verwenden Sie die TransferMode-Eigenschaft, um den Übertragungsmodus beim Erstellen einer benutzerdefinierten Bindung festzulegen.For example, create an HttpTransportBindingElement and use the TransferMode property to set the transfer mode when creating a custom binding. Der Übertragungsmodus kann auch im Konfigurationsabschnitt für die benutzerdefinierte Bindung festgelegt werden.The transfer mode can also be set in the configuration section for the custom binding.

Die Entscheidung, ob Stream-Übertragungen oder gepufferte Übertragungen verwendet werden, ist eine lokale Entscheidung des Endpunkts für HTTP-Transporte.The decision to use either buffered or streamed transfers is a local decision of the endpoint for HTTP transports. Bei HTTP-Übertragungen wird der Übertragungsmodus nicht über Verbindungen oder an Proxyserver oder andere Vermittler weitergegeben.For HTTP transports, the transfer mode does not propagate across a connection, or to proxy servers or other intermediaries. Das Festlegen des Übertragungsmodus spiegelt sich nicht in der Beschreibung des Dienstvertrags wider.Setting the transfer mode is not reflected in the description of the service contract. Nachdem Sie einen Proxy für einen Dienst erstellt haben, können Sie (dies ist zulässig, aber nicht erforderlich) die Konfigurationsdatei für Dienste bearbeiten, die mit Stream-Übertragungen verwendet werden sollen, um den Übertragungsmodus festzulegen.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. Bei TCP und Named Pipe-Transporten wird der Übertragungsmodus als Richtlinienassertion weitergegeben.For TCP and named pipe transports, the transfer mode is propagated as a policy assertion.

Verwenden den Übertragungsmodus Streamed bewirkt, dass die WCF-Laufzeit, um einige Einschränkungen zu erzwingen.Using the Streamed transfer mode causes the WCF runtime to enforce some restrictions.

  • Vorgänge, die in einem Stream-Transport erfolgen, können einen Vertrag mit höchstens einem Eingabeparameter und/oder einem Ausgabeparameter auf der Ebene des Programmiermodells haben.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. Der Parameter entspricht dem gesamten Nachrichtentext, und es muss sich um Message, einen Untertyp von Stream oder um eine IXmlSerializable-Implementierung handeln.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. Ein Rückgabewert für einen Vorgang entspricht einem Ausgabeparameter.Having a return value for an operation is equivalent to having an output parameter.

  • Einige WCF-Funktionen wie zuverlässiges Messaging und Sicherheit für SOAP-Nachrichtenebene verwenden gepufferte Nachrichten für Übertragungen.Some WCF features such as Reliable Messaging and SOAP message-level security rely on buffering messages for transmissions. Dadurch können mögliche Leistungsvorteile durch das Streaming reduziert oder zunichte gemacht werden.Using these features may reduce or eliminate the performance benefits gained by using streaming. Um einen Stream-Transport zu sichern, verwenden Sie nur die Sicherheit auf Transportebene oder eine Mischmodussicherheit, die WS-Security-Ansprüche mit der Transportsicherheit verbindet.To secure a streamed transport, use transport level security only or use mixed-mode security, which combines WS-Security claims with transport security.

  • SOAP-Header werden immer gepuffert, auch wenn der Übertragungsmodus auf Streamed festgelegt ist.SOAP headers are always buffered, even when the transfer mode is set to Streamed. Die Header für eine Nachricht dürfen die Größe des MaxBufferSize-Transportkontingents nicht überschreiten, das in den verschiedenen Bindungen und Bindungselementen verfügbar gemacht wird.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.

Änderung des Übertragungsmodus von gepufferte zu Streamed ändert sich auch die systemeigene kanalform von TCP- und named Pipe-Transporten.Changing the transfer mode from Buffered to Streamed also changes the native channel shape of the TCP and named pipe transports. Die systemeigene Kanalform für gepufferte Übertragungen ist IDuplexSessionChannel.For buffered transfers, the native channel shape is IDuplexSessionChannel. Die systemeigenen Kanäle für Streamingübertragungen sind IRequestChannel und IReplyChannel.For streamed transfers, the native channels are IRequestChannel and IReplyChannel. Eine Folge davon ist, dass sitzungsbasierten Dienstverträge nicht mit Transportstreaming verwendet werden können.A consequence of this is that sessionful service contracts cannot be used with transport streaming.

Gilt für: