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 streamte oder gepufferte Modi für die Übertragung von Anforderungs- und Antwortnachrichten verwendet.
public enum class TransferMode
public enum TransferMode
type TransferMode =
Public Enum TransferMode
- Vererbung
Felder
| Name | Wert | Beschreibung |
|---|---|---|
| Buffered | 0 | Die Anforderungs- und Antwortnachrichten werden beide gepuffert. |
| Streamed | 1 | Die Anforderungs- und Antwortnachrichten werden beide gestreamt. |
| StreamedRequest | 2 | Die Anforderungsnachricht wird gestreamt, und die Antwortnachricht wird gepuffert. |
| StreamedResponse | 3 | Die Anforderungsnachricht wird gepuffert, und die Antwortnachricht wird gestreamt. |
Beispiele
Im folgenden Beispiel wird die TcpTransportBindingElement.TransferMode-EigenschaftStreamed auf Code 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 auf Streamed die Konfiguration 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.
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.
Wenn Sie den Übertragungsmodus auf Streamed festlegen, wird ein Kommunikationsstream in beide Richtungen ermöglicht. Festlegen des Übertragungsmodus auf StreamedRequest oder StreamedResponse ermöglicht die Streamingkommunikation nur in der angegebenen Richtung.
Streamed Transfers können die Skalierbarkeit eines Diensts verbessern, indem die Notwendigkeit großer Speicherpuffer eliminiert wird. Ob das Ändern des Übertragungsmodus tatsächlich die Skalierbarkeit in der Praxis verbessert, hängt von der Größe der übertragenen Nachrichten ab. Verbesserungen bei der Skalierbarkeit sollten am deutlichsten sein, wenn große Nachrichten streamed anstelle von gepufferten Übertragungen verwenden.
Standardmäßig verwenden die HTTP-, TCP/IP- und benannten Pipetransporte gepufferte Nachrichtenübertragungen. Sie können die Werte für TransferMode die von dem BasicHttpBindingNetTcpBindingNetNamedPipeBinding System bereitgestellten Bindungen mithilfe der Eigenschaften des Übertragungsmodus festlegen, 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. Sie kann auch im Konfigurationsabschnitt für die Bindung festgelegt werden.
Für Bindungen, die die Übertragungsmoduseigenschaft nicht verfügbar machen, kann der Übertragungsmodus für das Bindungselement des Transports festgelegt werden, und dieses Element kann dann einer benutzerdefinierten Bindung hinzugefügt werden. Erstellen Sie beispielsweise eine 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, gepufferte oder gestreamte Übertragungen zu verwenden, ist eine lokale Entscheidung des Endpunkts für HTTP-Transporte. Bei HTTP-Transporten wird der Übertragungsmodus nicht über eine Verbindung oder an Proxyserver oder andere Vermittler weitergegeben. Das Festlegen des Übertragungsmodus wird in der Beschreibung des Servicevertrags nicht wiedergegeben. Nachdem Sie einen Proxy für einen Dienst generiert haben, können Sie (es ist zulässig, aber nicht erforderlich) die Konfigurationsdatei für Dienste bearbeiten, die mit gestreamten Übertragungen verwendet werden sollen, um den Übertragungsmodus festzulegen. Bei TCP- und Named-Pipe-Transportprotokollen wird der Übertragungsmodus als Richtlinien-Assertion weitergegeben.
Die Verwendung des Streamed Übertragungsmodus bewirkt, dass die WCF-Runtime einige Einschränkungen erzwingt.
Vorgänge, die über einen gestreamten Transport hinweg auftreten, können über einen Vertrag mit höchstens einem Eingabe- und/oder einem Ausgabeparameter auf der Programmiermodellebene verfügen. Dieser Parameter entspricht dem gesamten Textkörper der Nachricht und muss ein MessageUntertyp von Streamsein oder die IXmlSerializable Schnittstelle implementieren. Ein Rückgabewert für einen Vorgang entspricht einem Ausgabeparameter.
Einige WCF-Features wie zuverlässige Messaging- und SOAP-Sicherheit auf Nachrichtenebene basieren auf dem Puffern von Nachrichten für Übertragungen. Durch die Verwendung dieser Funktionen können die Leistungsvorteile, die durch Streaming erzielt werden, reduziert oder zunichte gemacht werden. Um einen gestreamten Transport zu sichern, verwenden Sie nur die Sicherheit auf Transportebene oder verwenden Die Sicherheit im gemischten Modus, die WS-Security Ansprüche mit Transportsicherheit kombiniert.
SOAP-Header werden immer gepuffert, auch wenn der Übertragungsmodus auf
Streamed. Die Kopfzeilen für eine Nachricht dürfen die Größe des MaxBufferSize-Transportkontingents, das für die verschiedenen Bindungen und Bindungselemente verfügbar gemacht wird, nicht überschreiten.
Wenn Sie den Übertragungsmodus ändern BufferedStreamed , wird auch das systemeigene Kanal-Shape des TCP- und benannten Pipetransports geändert. Die systemeigene Kanalform für gepufferte Übertragungen ist IDuplexSessionChannel. Die systemeigenen Kanäle für Streamingübertragungen sind IRequestChannel und IReplyChannel. Dies hat zur Folge, dass sitzungsbehaftete Serviceverträge nicht mit Transportstreaming verwendet werden können.