TransferMode Enumeration
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Gibt an, ob ein Kanal den Stream- oder Puffermodus für die Übertragung von Anforderungs- und Antwortnachrichten verwendet.
public enum class TransferMode
public enum TransferMode
type TransferMode =
Public Enum TransferMode
- Vererbung
Felder
Buffered | 0 | Die Anforderungs- und Antwortnachrichten werden gepuffert. |
Streamed | 1 | Die Anforderungs- und Antwortnachrichten werden per Stream übertragen. |
StreamedRequest | 2 | Die Anforderungsnachricht wird per Stream übertragen, und die Antwortnachricht wird gepuffert. |
StreamedResponse | 3 | Die Anforderungsnachricht wird gepuffert, und die Antwortnachricht wird per Stream übertragen. |
Beispiele
Im folgenden Beispiel wird die TcpTransportBindingElement.TransferMode-Eigenschaft über Code auf Streamed
festgelegt:
TcpTransportBindingElement transport = new TcpTransportBindingElement();
transport.TransferMode = TransferMode.Streamed;
BinaryMessageEncodingBindingElement encoder = new BinaryMessageEncodingBindingElement();
CustomBinding binding = new CustomBinding(encoder, transport);
Im folgenden Beispiel wird die TcpTransportBindingElement.TransferMode-Eigenschaft über die Konfiguration auf Streamed
festgelegt:
<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 jede Richtung:
Bei gepufferten Übertragungen wird die gesamte Nachricht in einem Puffer zwischengespeichert, bis die Übertragung abgeschlossen ist.
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.
Wenn Sie den Übertragungsmodus auf Streamed
festlegen, wird ein Kommunikationsstream in beide Richtungen ermöglicht. Wenn Sie den Übertragungsmodus auf StreamedRequest
oder StreamedResponse
festlegen, wird ein Kommunikationsstream nur in der angegebenen Richtung ermöglicht.
Stream-Übertragungen können die Skalierbarkeit eines Dienstes verbessern, indem sie große Speicherpuffer überflüssig machen. Ob die Änderung des Übertragungsmodus die Skalierbarkeit tatsächlich verbessert, hängt von der Größe der übertragenen Nachrichten ab. Verbesserungen der Skalierbarkeit sollten am deutlichsten zutage treten, wenn große Nachrichten Stream-Übertragungen anstelle gepufferter Übertragungen verwenden.
Standardmäßig verwenden HTTP, TCP/IP sowie Named Pipe-Transporte gepufferte Nachrichtenübertragungen. Sie können die Werte für TransferMode
die BasicHttpBindingvom System bereitgestellten Bindungen , NetTcpBindingund NetNamedPipeBinding festlegen, indem Sie die übertragungsmoduseigenschaften verwenden, die für sie verfügbar gemacht werden. Der Modus kann für die NetTcpBinding -Klasse festgelegt werden, z. B. mithilfe der NetTcpBinding.TransferMode -Eigenschaft. Er kann auch im Konfigurationsabschnitt für die Bindung festgelegt werden.
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. Erstellen Sie beispielsweise ein HttpTransportBindingElement, und verwenden Sie die TransferMode-Eigenschaft, um den Übertragungsmodus beim Erstellen einer benutzerdefinierten Bindung festzulegen. Der Übertragungsmodus kann auch im Konfigurationsabschnitt für die benutzerdefinierte Bindung festgelegt werden.
Die Entscheidung, ob Stream-Übertragungen oder gepufferte Übertragungen verwendet werden, ist eine lokale Entscheidung des Endpunkts für HTTP-Transporte. Bei HTTP-Übertragungen wird der Übertragungsmodus nicht über Verbindungen oder an Proxyserver oder andere Vermittler weitergegeben. Das Festlegen des Übertragungsmodus spiegelt sich nicht in der Beschreibung des Dienstvertrags wider. 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. Bei TCP und Named Pipe-Transporten wird der Übertragungsmodus als Richtlinienassertion weitergegeben.
Die Verwendung des Streamed
Übertragungsmodus bewirkt, dass die WCF-Runtime einige Einschränkungen erzwingt.
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. Der Parameter entspricht dem gesamten Nachrichtentext, und es muss sich um Message, einen Untertyp von Stream oder um eine IXmlSerializable-Implementierung handeln. Ein Rückgabewert für einen Vorgang entspricht einem Ausgabeparameter.
Einige WCF-Features wie Reliable Messaging und SOAP-Sicherheit auf Nachrichtenebene basieren auf der Pufferung von Nachrichten für Übertragungen. Dadurch können mögliche Leistungsvorteile durch das Streaming reduziert oder zunichte gemacht werden. 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.
SOAP-Header werden immer gepuffert, auch wenn der Übertragungsmodus auf
Streamed
festgelegt ist. Die Header für eine Nachricht dürfen die Größe des MaxBufferSize-Transportkontintents nicht überschreiten, das in den verschiedenen Bindungen und Bindungselementen verfügbar gemacht wird.
Durch das Ändern des Übertragungsmodus von Buffered
in Streamed
wird auch die systemeigene Kanalform von TCP- und Named Pipe-Transporten geändert. Die systemeigene Kanalform für gepufferte Übertragungen ist IDuplexSessionChannel. Die systemeigenen Kanäle für Streamingübertragungen sind IRequestChannel und IReplyChannel. Eine Folge davon ist, dass sitzungsbasierten Dienstverträge nicht mit Transportstreaming verwendet werden können.