Umfangreiche Daten und StreamingLarge Data and Streaming

Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) ist eine auf XML basierende Kommunikationsinfrastruktur.is an XML-based communications infrastructure. Da XML-Daten häufig in im definierten standard-Text-Format codiert ist die XML 1.0-Spezifikation, verbundene Systeme Entwicklern und Architekten sind in der Regel besorgt Wire Ressourcenbedarf (oder der Größe) der gesendeten Nachrichten über das Netzwerk und die textbasierte Codierung von XML-dürfen besondere Herausforderung dar, für die effiziente Übertragung binärer Daten.Because XML data is commonly encoded in the standard text format defined in the XML 1.0 specification, connected systems developers and architects are typically concerned about the wire footprint (or size) of messages sent across the network, and the text-based encoding of XML poses special challenges for the efficient transfer of binary data.

Allgemeine ÜberlegungenBasic Considerations

In diesem Abschnitt werden einige der allgemeinen Fragen und Überlegungen hinsichtlich Codierung, binärer Daten und Streaming behandelt, die sich in der Regel auf die Infrastruktur verbundener Systeme beziehen. Diese Ausführungen dienen als Hintergrundinformationen für die anschließenden Informationen zu WCFWCF.To provide background information about the following information for WCFWCF, this section highlights some general concerns and considerations for encodings, binary data, and streaming that generally apply to connected systems infrastructures.

Codieren von Daten: Text oder BinärEncoding Data: Text vs. Binary

Zu den verbreiteten Bedenken von Entwicklern gehört die Annahme, dass XML im Vergleich zu binären Formaten einen erheblichen Mehraufwand mit sich bringt, angesichts der sich wiederholenden Natur von Starttags und Endtags. Die Codierung numerische Werte scheint ihnen wesentlich umfangreicher, da diese Werte in Textwerten ausgedrückt werden, und sie fürchten, dass binäre Daten nicht effizient ausgedrückt werden, da sie speziell codiert werden müssen, um in ein Textformat eingebettet werden zu können.Commonly expressed developer concerns include the perception that XML has significant overhead when compared to binary formats due to the repetitive nature of start tags and end tags, that the encoding of numerical values is considered to be significantly larger because they are expressed in text values, and that binary data cannot be expressed efficiently because it must be specially encoded for embedding into a text format.

Zwar treffen diese und ähnliche Bedenken zu, doch ist der tatsächliche Unterschied zwischen XML-textcodierten Nachrichten in einer XML-Webdienstumgebung und binärcodierten Nachrichten in einer älteren RPC-Umgebung (Remote Procedure Call) häufig wesentlich geringer als auf den ersten Blick vermutet.While many of these and similar concerns are valid, the actual difference between XML-text encoded messages in an XML Web services environment and binary-encoded messages in a legacy remote procedure call (RPC) environment is often much less significant than the initial consideration might suggest.

Während XML-textcodierte Nachrichten transparent und "lesbar" sind, sind binäre Nachrichten im Vergleich dazu häufig reichlich obskur und ohne Tools nur schwer zu decodieren.While XML-text encoded messages are transparent and "human readable", binary messages are often fairly obscure in comparison and difficult to decode without tools. Der Unterschied in der Lesbarkeit verschleiert leicht die Tatsache, dass auch binäre Nachrichten häufig Inline-Metadaten in der Nutzlast enthalten, was genau wie bei XML-Textnachrichten zu Mehraufwand führt.This difference in legibility leads one to overlook that binary messages also often carry inline metadata in the payload, which adds overhead just as with XML text messages. Das trifft besonders auf binäre Formate zu, die Funktionen für lose Verknüpfungen und dynamische Aufrufe bieten sollen.This is specifically true for binary formats that aim to provide loose-coupling and dynamic invocation capabilities.

Binäre Formate führen in der Regel solche beschreibenden Metadateninformationen in einem "Header", in dem auch das Datenlayout für die folgenden Datensätze deklariert werden.However, binary formats commonly carry such descriptive metadata information in a "header," which also declares the data layout for the following data records. Dieser allgemeinen Metadatenblockdeklaration folgt in der Regel die Nutzlast mit nur minimalem weiteren Mehraufwand.The payload then follows this common metadata block declaration with minimal further overhead. Im Gegensatz dazu schließt XML jedes Datenelement in ein Element oder Attribut ein, sodass das Einschließen von Metadaten für jedes serialisierte Nutzlastobjekt wiederholt erfolgt.In contrast, XML encloses each data item in an element or attribute so that the enclosing metadata is repetitively included for each serialized payload object. Letztendlich ist die Größe eines einzelnen serialisierten Nutzlastobjekts bei einem Vergleich zwischen Text- und Binärdarstellungen ähnlich, da einige beschreibende Metadaten bei beidem ausgedrückt werden müssen. Das binäre Format profitiert jedoch von der gemeinsame Metadatenbeschreibung bei jedem zusätzlichen Nutzlastobjekt, das übertragen wird, aufgrund der des niedrigeren Gesamtaufwands.As a result, the size of a single serialized payload object is similar when comparing text to binary representations as some descriptive metadata must be expressed for both, but the binary format benefits from the shared metadata description with each additional payload object that is transferred due to the lower overall overhead.

Bei bestimmten Datentypen, wie z. B. Zahlen, kann die Verwendung binärer numerischer Darstellungen fester Größe, wie ein dezimaler 128-Bit-Typ anstelle von Nur-Text, allerdings ein gewisser Nachteil sein, da die Nur-Text-Darstellung einige Byte kleiner sein kann.Still, for certain data types, such as numbers, there might be a disadvantage to using fixed-size, binary numerical representations, such as a 128-bit decimal type instead of plain text, as the plain text representation might be several bytes smaller. Die normalerweise flexiblerern Optionen zur XML-Textcodierung können Textdaten auch Größenvorteile bescheren, während einige binäre Formate vielleicht standardmäßig das 16-Bit- oder sogar 32-Bit-Unicode-Format verwenden, was auf das .NET Binary XML-Format nicht zutrifft.Text data also might have size benefits from the typically more flexible XML text encoding choices, while some binary formats might default to 16-bit or even 32-bit Unicode, which does not apply to the .NET Binary XML Format.

Somit ist die Entscheidung zwischen Text- oder Binärformat nicht ganz so einfach wie die Annahme, dass binäre Nachrichten immer kleiner sind als XML-Textnachrichten.As a result, deciding between text or binary is not quite as easy as assuming that binary messages are always smaller than XML-text messages.

Ein eindeutiger Vorteil von XML-Textnachrichten besteht jedoch darin, dass sie auf Standards basieren und eine breite Palette an Interoperabilitätsoptionen und Plattformunterstützung bieten.A clear advantage of XML-text messages is that they are standards-based and offer the broadest choice of interoperability options and platform support. Weitere Informationen finden Sie unterFor more information, see dem Abschnitt "Codierungen" weiter unten in diesem Thema. the "Encodings" section later in this topic.

Binärer InhaltBinary Content

Es gibt einen Bereich, in dem binäre Codierungen textbasierten Codierungen in Hinblick auf die resultierende Nachrichtengröße überlegen sind, und zwar bei großen binären Datenelementen. Dazu gehören Bilder, Videos, Soundclips und jede sonstige Form von nicht transparenten, binären Daten, die zwischen einem Dienst und seinem Consumer ausgetauscht werden.One area where binary encodings are superior to text-based encodings in terms of the resulting message size are large binary data items such as pictures, videos, sound clips, or any other form of opaque, binary data that must be exchanged between services and their consumers. Damit diese Typen in XML-Text passen, werden sie in der Regel mit Base64 codiert.To fit these types of data into XML text, the common approach is to encode them using the Base64 encoding.

In einer Base64-codierten Zeichenfolge stellt jedes Zeichen 6 Bits der ursprünglichen 8-Bit-Daten dar. Das ergibt ein Codierung-Mehraufwand-Verhältnis von 4:3 für Base64, wobei üblicherweise bei der Konvertierung hinzugefügte zusätzliche Formatierungszeichen (Wagenrücklauf/Zeilenvorschub) nicht berücksichtigt werden.In a Base64-encoded string, each character represents 6-bits of the original 8-bit data, which results in a 4:3 encoding-overhead ratio for Base64, not counting extra formatting characters (carriage return/line feed) that are commonly added by convention. Während die Bedeutung der Unterschiede zwischen XML und binären Codierungen normalerweise vom Szenario abhängen, ist die Größenzunahme von über 33 % beim Übertragen einer 500-MB-Nutzlast in der Regel nicht akzeptabel.While the significance of the differences between XML and binary encodings typically depends on the scenario, a size gain of more than 33% when transmitting a 500-MB payload is usually not acceptable.

Um diesen Codierungsaufwand zu verhindern, ermöglicht der MTOM-Standard (Message Transmission Optimization Mechanism) eine Externalisierung großer Datenelement, die in einer Nachrichten enthalten sind. Dabei können die Elemente als Binärdaten ohne spezielle Codierung mit der Nachricht gesendet werden.To avoid this encoding overhead, the Message Transmission Optimization Mechanism (MTOM) standard allows for externalizing large data elements that are contained in a message and carrying them with the message as binary data without any special encoding. Bei MTOM werden Nachrichten in ähnlicher Weise wie Simple Mail Transfer Protocol (SMTP) e-Mail-Nachrichten mit Anlagen oder eingebetteten Inhalten (Bilder oder anderer eingebetteter Inhalt) ausgetauscht. MTOM-Nachrichten werden als Multipart/related MIME-Sequenzen verpackt, wobei der Stammteil die eigentliche SOAP-Nachricht.With MTOM, messages are exchanged in a similar fashion to Simple Mail Transfer Protocol (SMTP) email messages with attachments or embedded content (pictures and other embedded content); MTOM messages are packaged as multipart/related MIME sequences with the root part being the actual SOAP message.

Eine MTOM-SOAP-Nachricht wird in ihrer uncodierten Version geändert. Dabei ersetzen spezielle Elementtags, die sich auf die jeweiligen MIME-Teile beziehen, die ursprünglichen Elemente in der Nachricht, die binäre Daten enthielten.An MTOM SOAP message is modified from its un-encoded version so that special element tags that refer to the respective MIME parts take the place of the original elements in the message that contained binary data. Als Ergebnis bezieht sich die SOAP-Nachricht auf binären Inhalt, indem auf die mit ihr gesendeten MIME-Teile verwiesen wird, ansonsten jedoch nur XML-Textdaten enthalten sind.As a result, the SOAP message refers to binary content by pointing to the MIME parts sent with it, but otherwise just carries XML text data. Da dieses Model eng an das weit verbreiteten SMTP-Modell anlehnt, gibt es ein breites Angebot an Tools zur Codierung und Decodierung von MTOM-Nachrichten für viele Pattformen, was eine hohe Interoperabilität gewährleistet.Because this model is closely aligned with the well-established SMTP model, there is broad tooling support to encode and decode MTOM messages on many platforms, which makes it an extremely interoperable choice.

Doch wie bei Base64 ist auch bei MTOM ein gewisser Mehraufwand für das MIME-Format erforderlich, sodass sich die Vorteile von MTOM nur dann bemerkbar machen, wenn die Größe eines binären Datenelements ungefähr 1 KB überschreitet.Still, as with Base64, MTOM also comes with some necessary overhead for the MIME format, so that advantages of using MTOM are only seen when the size of a binary data element exceeds about 1 KB. Aufgrund dieses Mehraufwands sind MTOM-codierte Nachrichten möglicherweise größer als Nachrichten, die eine Base64-Codierung für binäre Daten verwenden, wenn die binäre Nutzlast diese Schwelle nicht überschreitet.Due to the overhead, MTOM-encoded messages might be larger than messages that use Base64 encoding for binary data, if the binary payload remains under that threshold. Weitere Informationen finden Sie unterFor more information, see dem Abschnitt "Codierungen" weiter unten in diesem Thema. the "Encodings" section later in this topic.

Inhalte mit umfangreichen DatenLarge Data Content

Abgesehen von der Übertragungsgröße stellt die oben erwähnte 500-MB-Nutzlast für den Dienst und den Client auch lokal ein nicht unerhebliches Problem dar.Wire-footprint aside, the previously mentioned 500-MB payload also poses a great local challenge at for the service and the client. Standardmäßig WCFWCF verarbeitet die Nachrichten in Puffermodus.By default, WCFWCF processes messages in buffered mode. Dabei befindet sich der gesamte Inhalt vor dem Senden oder nach dem Empfang im Arbeitsspeicher.This means that the entire content of a message is present in memory before it is sent or after it is received. In den meisten Szenarien ist das zwar eine gute Strategie, und für Messagingfunktionen wie digitale Signaturen sowie für eine zuverlässige Zustellung ist das sogar eine Notwendigkeit, doch bei großen Nachrichten erschöpfen sich dadurch leicht die Systemressourcen.While that is a good strategy for most scenarios, and necessary for messaging features such as digital signatures and reliable delivery, large messages could exhaust a system's resources.

Die bei großen Nutzlasten einzuschlagende Strategie ist Streaming.The strategy to deal with large payloads is streaming. Obwohl Nachrichten, insbesondere in XML ausgedrückt, allgemein als relativ kompakte Datenpakete angesehen werden, kann eine Nachricht mehrere Gigabyte groß sein und eher einem durchgehenden Datenstrom ähneln statt einem Datenpaket.While messages, especially those expressed in XML, are commonly thought of as being relatively compact data packages, a message might be multiple gigabytes in size and resemble a continuous data stream more than a data package. Wenn Daten im Streamingmodus anstatt im Puffermodus übertragen werden, macht der Absender den Inhalt des Nachrichtentextes in der Form eines Streams für den Empfänger verfügbar. Dabei leitet die Nachrichteninfrastruktur die Daten fortlaufend vom Absender an den Empfänger weiter.When data is transferred in streaming mode instead of buffered mode, the sender makes the contents of the message body available to the recipient in the form of a stream and the message infrastructure continuously forwards the data from sender to receiver as it becomes available.

Das häufigste Szenario, bei dem Inhalte mit umfangreichen Daten übertragen werden, sind Übertragungen von binären Datenobjekten, die folgende Merkmale aufweisen:The most common scenario in which such large data content transfers occur are transfers of binary data objects that:

  • Die Objekte können nur schwer in eine Nachrichtensequenz unterteilt werden.Cannot be easily broken up into a message sequence.

  • Die Zustellung muss schnell erfolgen.Must be delivered in a timely manner.

  • Die Objekte sind noch nicht vollständig verfügbar, wenn die Übertragung beginnt.Are not available in their entirety when the transfer is initiated.

Bei Daten, die diesen Einschränkungen nicht unterliegen, ist es in der Regel besser, anstatt einer großen Nachricht Sequenzen der Nachrichten im Rahmen einer Sitzung zu senden.For data that does not have these constraints, it is typically better to send sequences of messages within the scope of a session than one large message. Weitere Informationen finden Sie unterFor more information, see dem Abschnitt "Streaming von Daten" weiter unten in diesem Thema. the "Streaming Data" section later in this topic.

Beim Senden von großer Mengen von Daten müssen Sie festlegen der maxAllowedContentLength IIS-Einstellung (Weitere Informationen finden Sie unter Konfigurieren von IIS Anforderungslimits) und die maxReceivedMessageSize binden Einstellung (z. B. System.ServiceModel.BasicHttpBinding.MaxReceivedMessageSize oder MaxReceivedMessageSize).When sending large amounts of data you will need to set the maxAllowedContentLength IIS setting (for more information see Configuring IIS Request Limits) and the maxReceivedMessageSize binding setting (for example System.ServiceModel.BasicHttpBinding.MaxReceivedMessageSize or MaxReceivedMessageSize). Die maxAllowedContentLength -Eigenschaft hat den Standardwert 28,6 MB und der maxReceivedMessageSize -Eigenschaft standardmäßig auf 64 KB.The maxAllowedContentLength property defaults to 28.6 M and the maxReceivedMessageSize property defaults to 64KB.

CodierungenEncodings

Ein Codierung definiert einen Satz von Regeln dazu, wie Nachrichten bei der Übertragung zu präsentieren.An encoding defines a set of rules about how to present messages on the wire. Ein Encoder implementiert diese Codierung und sorgt auf der Absenderseite eingeräumt eine Message in-Memory-Nachricht in einen Bytestream oder Bytepuffer, der über das Netzwerk gesendet werden kann.An encoder implements such an encoding and is responsible, on the sender side, for turning a Message in-memory message into a byte stream or byte buffer that can be sent across the network. Auf der Empfängerseite wandelt der Encoder die Bytesequenz wieder in eine Nachricht im Arbeitsspeicher um.On the receiver side, the encoder turns a sequence of bytes into an in-memory message.

WCFWCF enthält drei Encoder und ermöglicht Ihnen das Schreiben und schließen Sie eine eigene Encoder bei Bedarf.includes three encoders and allows you to write and plug in your own encoders, if necessary.

Jede der Standardbindungen schließt einen vorkonfigurierten Encoder ein. Dabei verwenden standardmäßig die Bindungen mit dem Präfix Net* den binären Encoder (indem die BinaryMessageEncodingBindingElement-Klasse eingeschlossen wird), und die Klassen BasicHttpBinding und WSHttpBinding verwenden den Textnachrichtenencoder (anhand der TextMessageEncodingBindingElement-Klasse).Each of the standard bindings includes a preconfigured encoder, whereby the bindings with the Net* prefix use the binary encoder (by including the BinaryMessageEncodingBindingElement class) while the BasicHttpBinding and WSHttpBinding classes use the text message encoder (by means of the TextMessageEncodingBindingElement class) by default.

Bindungselement des EncodersEncoder binding element BeschreibungDescription
TextMessageEncodingBindingElement Der Textnachrichtencoder ist der Standardencoder für alle HTTP-basierten Bindungen. Er empfiehlt sich für alle benutzerdefinierten Bindungen, bei denen besonders auf Interoperabilität Wert gelegt wird.The text message encoder is the default encoder for all HTTP-based bindings and the appropriate choice for all custom bindings where interoperability is the highest concern. Dieser Encoder liest und schreibt auf SOAP 1.1/SOAP 1.2 basierende Standardtextnachrichten ohne spezielle Behandlung von binären Daten.This encoder reads and writes standard SOAP 1.1/SOAP 1.2 text messages with no special handling for binary data. Wenn MessageVersion einer Nachricht nicht auf None festgelegt ist, wird der Wrapper des SOAP-Umschlags in der Ausgabe weggelassen und nur der Inhalt des Nachrichtentextes wird serialisiert.If the MessageVersion of a message is set to None, the SOAP envelope wrapper is omitted from the output and only the message body content is serialized.
MtomMessageEncodingBindingElement Der MTOM-Nachrichtenencoder ist ein Textencoder, der eine spezielle Behandlung binärer Daten implementiert und nicht standardmäßig in den Standardbindungen verwendet wird, da es sich um ein extrem fallabhängiges Hilfsprogramm für Optimierungen handelt.The MTOM message encoder is a text encoder that implements special handling for binary data and is not used by default in any of the standard bindings because it is strictly a case-by-case optimization utility. Wenn die Nachricht binäre Daten enthält, die einen Schwellenwert überschreiten, nach dem die MTOM-Codierung vorteilhafter ist, werden die Daten in einen MIME-Teil externalisiert, der auf den Nachrichtenumschlag folgt.If the message contains binary data that exceeds a threshold where MTOM encoding yields a benefit, the data is externalized into a MIME part following the message envelope. Siehe "Aktivieren von MTOM" weiten unten in diesem Abschnitt.See Enabling MTOM later in this section.
BinaryMessageEncodingBindingElement Der binäre Nachrichtenencoder ist der Standardencoder für Net*-Bindungen und empfiehlt sich, wenn beide Kommunikationspartner auf WCFWCF basieren.The binary message encoder is the default encoder for the Net* bindings and the appropriate choice whenever both communicating parties are based on WCFWCF. Der binäre Nachrichtenencoder verwendet das .NET Binary XML-Format. Dieses Format ist eine spezielle Binärdarstellung für XML-Informationssets (Infosets) von Microsoft, die in der Regel kompakter ist als die entsprechende XML 1.0-Darstellung und binäre Daten als Bytestream codiert.The binary message encoder uses the .NET Binary XML Format, a Microsoft-specific binary representation for XML Information Sets (Infosets) that generally yields a smaller footprint than the equivalent XML 1.0 representation and encodes binary data as a byte stream.

Die Textnachrichtencodierung empfiehlt sich in der Regel für Kommunikationspfade, die Interoperabilität erfordern, während die binäre Nachrichtencodierung für jeden anderen Kommunikationspfad die optimale Lösung ist.Text message encoding is typically the best choice for any communication path that requires interoperability, while binary message encoding is the best choice for any other communication path. Die binäre Nachrichtencodierung führt im Vergleich zu Text bei einzelnen Nachrichten meist zu einer geringeren Größe und progressiv im Verlauf einer Kommunikationssitzung sogar zu noch kleineren Nachrichten.Binary message encoding typically yields smaller message sizes compared to text for a single message and progressively even smaller message sizes over the duration of a communication session. Im Unterschied zur Textcodierung gibt es bei der binären Codierung keine spezielle Behandlung von binären Daten, wie die Verwendung von Base64, sondern Bytes werden als Bytes dargestellt.Unlike text encoding, binary encoding does not have to use special handling for binary data, such as using Base64, but represents bytes as bytes.

Wenn Sie für Ihre Lösung keine Interoperabilität benötigen, aber trotzdem den HTTP-Transport verwenden möchten, machen Sie BinaryMessageEncodingBindingElement zu einer benutzerdefinierten Bindung, die die HttpTransportBindingElement-Klasse für den Transport verwendet.If your solution does not require interoperability, but you still want to use HTTP transport, you can compose the BinaryMessageEncodingBindingElement into a custom binding that uses the HttpTransportBindingElement class for the transport. Wenn verschiedene Clients Ihres Dienstes Interoperabilität benötigen, sollten Sie parallele Endpunkte verfügbar machen, bei denen jeweils die geeigneten Transport- und Codieroptionen für den entsprechenden Client aktiviert sind.If a number of clients on your service require interoperability, it is recommended that you expose parallel endpoints that each has the appropriate transport and encoding choices for the respective clients enabled.

Aktivieren von MTOMEnabling MTOM

Wenn Interoperabilität erforderlich ist und umfangreiche binäre Daten gesendet werden müssen, stellt die MTOM-Nachrichtencodierung die alternative Codierungsstrategie dar, die Sie für die Standardbindungen BasicHttpBinding oder WSHttpBinding aktivieren können. Legen Sie dazu die jeweilige MessageEncoding-Eigenschaft auf Mtom fest, oder machen Sie MtomMessageEncodingBindingElement zu einer CustomBinding.When interoperability is a requirement and large binary data must be sent, then MTOM message encoding is the alternative encoding strategy that you can enable on the standard BasicHttpBinding or WSHttpBinding bindings by setting the respective MessageEncoding property to Mtom or by composing the MtomMessageEncodingBindingElement into a CustomBinding. Der folgende Beispielcode, extrahiert aus der MTOM-Codierung Beispiel zeigt, wie zum Aktivieren von MTOM in Konfiguration.The following example code, extracted from the MTOM Encoding sample demonstrates how to enable MTOM in configuration.

<system.serviceModel>  
     …  
    <bindings>  
      <wsHttpBinding>  
        <binding name="ExampleBinding" messageEncoding="Mtom"/>  
      </wsHttpBinding>  
    </bindings>  
     …  
<system.serviceModel>  

Wie bereits erwähnt, hängt die Entscheidung für die MTOM-Codierung vom zu sendenden Datenvolumen ab.As mentioned earlier, the decision to use MTOM encoding depends on the data volume you are sending. Da MTOM auf der Bindungsebene aktiviert wird, wirkt sich diese Codierung auf alle Vorgänge eines bestimmten Endpunkts aus.Also, because MTOM is enabled at the binding level, enabling MTOM affects all operations on a given endpoint.

Der MTOM-Encoder gibt unabhängig davon, ob binäre Daten letztendlich externalisiert werden, immer MTOM-codierte MIME-Multipart-Nachrichten aus. Aktivieren Sie deshalb MTOM nur für Endpunkte, die Nachrichten mit über 1 KB binärer Daten austauschen.Because the MTOM encoder always emits an MTOM-encoded MIME/multi-part message regardless of whether binary data ends up being externalized, you should generally only enable MTOM for endpoints that exchange messages with more than 1 KB of binary data. Außerdem sollten die Dienstverträge, die für die Verwendung mit für MTOM aktivierten Endpunkten möglichst darauf beschränkt sein, dass sie nur Vorgänge zu solchen Datenübertragungen angeben.Also, the service contracts designed for use with MTOM-enabled endpoints should, when possible, be constrained to specifying such data transfer operations. Die zugehörigen Steuerungsfunktionen sollten sich in einem gesonderten Vertrag befinden.Related control functionality should reside on a separate contract. Diese "Nur-MTOM"-Regel gilt nur für Nachrichten, die über einen für MTOM aktivierten Endpunkt gesendet werden. Der MTOM-Encoder kann auch eingehende Nachrichten decodieren und analysieren, die nicht auf MTOM basieren.This "MTOM-only" rule applies only to messages sent through an MTOM-enabled endpoint; the MTOM-encoder can decode and parse incoming non-MTOM messages as well.

Die Verwendung des MTOM-Encoders ist mit allen anderen Funktionen von WCFWCF konform.Using the MTOM encoder conforms with all other WCFWCF features. Beachten Sie jedoch, dass diese Regel nicht in allen Fällen gelten kann, wie z. B. bei einer erforderlichen Sitzungsunterstützung.Note that it may not be possible to observe this rule in all cases, such as when session support is required.

ProgrammiermodellProgramming Model

Unabhängig davon, welchen der drei integrierten Encoder Sie in Ihrer Anwendung verwenden, erfolgt die Programmierung zur Übertragung binärer Daten in allen Fällen auf die gleiche Weise.Regardless of which of the three built-in encoders you use in your application, the programming experience is identical with regards to transferring binary data. Der Unterschied besteht darin, wie die Daten basierend auf dem Datentyp in WCFWCF behandelt werden.The difference is in how WCFWCF handles the data based on their data types.

[DataContract]  
class MyData  
{  
    [DataMember]  
    byte[] binaryBuffer;  
    [DataMember]  
    string someStringData;  
}   

Bei der Verwendung von MTOM wird der vorausgehende Datenvertrag nach den folgenden Regeln serialisiert:When using MTOM, the preceding data contract is serialized according to the following rules:

  • Wenn binaryBuffer nicht null ist und im Einzelfall genügend Daten enthält, um den MTOM-Externalisierungsmehraufwand (MIME-Header usw.) im Vergleich zur Base64-Codierung zu rechtfertigen, werden die Daten externalisiert und als binärer MIME-Teil mit der Nachricht gesendet.If binaryBuffer is not null and individually contains enough data to justify the MTOM externalization overhead (MIME headers, and so on) when compared to Base64 encoding, the data is externalized and carried with the message as a binary MIME part. Wird der Schwellenwert nicht überschritten, werden die Daten als Base64 codiert.If the threshold is not exceeded, the data is encoded as Base64.

  • Die Zeichenfolge (und alle anderen nicht binären Typen) wird unabhängig von der Größe immer als Zeichenfolge innerhalb des Nachrichtentextes dargestellt.The string (and all other types that are not binary) is always represented as a string inside the message body, regardless of size.

Die Auswirkungen auf die MTOM-Codierung bleiben gleich, unabhängig davon, ob Sie einen expliziten Datenvertrag wie im vorherigen Beispiel, eine Parameterliste in einem Vorgang oder geschachtelte Datenverträge verwenden oder ob Sie Datenvertragsobjekte innerhalb einer Auflistung übertragen.The effect on the MTOM encoding is the same whether you use an explicit data contract, as shown in the preceding example, use a parameter list in an operation, have nested data contracts, or transfer a data contract object inside a collection. Bytearrays eignen sich immer für eine Optimierung und werden optimiert, wenn die Optimierungsschwellenwerte erreicht sind.Byte arrays are always candidates for optimization and are optimized if the optimization thresholds are being met.

Hinweis

Verwenden Sie keine von System.IO.Stream abgeleiteten Typen in Datenverträgen.You should not be using System.IO.Stream derived types inside of data contracts. Streamdaten sollten nach einem Streamingmodell übermittelt werden, wie im folgenden Abschnitt "Streaming von Daten" erläutert wird.Stream data should be communicated using the streaming model, explained in the following "Streaming Data" section.

Streaming von DatenStreaming Data

Wenn Sie eine große Datenmenge übertragen müssen, ist der Streamingübertragungsmodus in WCFWCF eine praktische Alternative zum Standardverhalten, bei dem vollständiger Nachrichten im Arbeitsspeicher bepuffert und verarbeitet werden.When you have a large amount of data to transfer, the streaming transfer mode in WCFWCF is a feasible alternative to the default behavior of buffering and processing messages in memory in their entirety.

Aktivieren Sie bei großen Nachrichten (mit Text oder binärem Inhalt) die Streamingfunktion, wenn die Daten nicht segmentiert werden können, schnell zugestellt werden müssen oder wenn die Daten beim Beginn der Übertragung noch nicht vollständig verfügbar sind.As mentioned earlier, enable streaming only for large messages (with text or binary content) if the data cannot be segmented, if the message must be delivered in a timely fashion, or if the data is not yet fully available when the transfer is initiated.

BeschränkungenRestrictions

Sie können bei aktiviertem Streaming sehr viele WCFWCF-Funktionen verwenden:You cannot use a significant number of WCFWCF features when streaming is enabled:

  • Digitale Signaturen für den Nachrichtentext sind nicht möglich, da sie Berechnungen oder einen Hash zum gesamten Nachrichteninhalt erfordern.Digital signatures for the message body cannot be performed because they require computing a hash over the entire message contents. Beim Streaming ist der Inhalt nicht vollständig verfügbar, wenn die Nachrichtenheader erstellt und gesendet werden, weshalb keine digitale Signatur berechnet werden kann.With streaming, the content is not fully available when the message headers are constructed and sent and, therefore, a digital signature cannot be computed.

  • Die Verschlüsselung hängt von digitalen Signaturen ab, mit denen überprüft wird, ob die Daten ordnungsgemäß rekonstruiert wurden.Encryption depends on digital signatures to verify that the data has been reconstructed correctly.

  • Zuverlässige Sitzungen müssen gesendete Nachrichten für den Client puffen, damit bei der Übertragung verlorgen gegangene Nachrichten neu gesendet werden können. Außerdem müssen sie Nachrichten vor einer Weitergabe an die Dienstimplementierung für den Dienst zurückhalten, um die richtige Nachrichtenfolge beizubehalten, falls Nachrichten nicht in der richtigen Folge eingehen.Reliable sessions must buffer sent messages on the client for redelivery if a message gets lost in transfer and must hold messages on the service before handing them to the service implementation to preserve message order in case messages are received out-of-sequence.

Wegen dieser funktionalen Einschränkungen können Sie nur Sicherheitsoptionen auf Transportebene für das Streaming verwenden. Zuverlässige Sitzungen können nicht bereitgestellt werden.Because of these functional constraints, you can use only transport-level security options for streaming and you cannot turn on reliable sessions. Das Streaming ist nur mit den folgenden vom System definierten Bindungen verfügbar:Streaming is only available with the following system-defined bindings:

Da die zugrunde liegenden Transporte von NetTcpBinding und NetNamedPipeBinding im Unterschied zu HTTP naturgemäß eine zuverlässige Zustellung und verbindungsbasierte Sitzungsunterstützung aufweisen, sind diese Bindungen in der Praxis nur minimal von diesen Einschränkungen betroffen.Because the underlying transports of NetTcpBinding and NetNamedPipeBinding have inherent reliable delivery and connection-based session support, unlike HTTP, these two bindings are only minimally affected by these constraints, in practice.

Streaming ist für den MSMQ-Transport (Message Queuing) nicht verfügbar und kann deshalb nicht mit der NetMsmqBinding- oder der MsmqIntegrationBinding-Klasse verwendet werden.Streaming is not available with the Message Queuing (MSMQ) transport and so cannot be used with the NetMsmqBinding or the MsmqIntegrationBinding class. Der MSMQ-Transport unterstützt nur gepufferte Datenübertragungen mit einer eingeschränkten Nachrichtengröße. Alle anderen Transporte unterliegen in den meisten Szenarien jedoch keiner speziellen Einschränkung hinsichtlich der Nachrichtengröße.The Message Queuing transport only supports buffered data transfers with a constrained message size, while all other transports do not have any practical message size limit for the vast majority of scenarios.

Streaming ist auch beim Peerkanaltransport nicht verfügbar und kann deshalb nicht mit NetPeerTcpBinding verwendet werden.Streaming is also not available when using the Peer Channel transport, so is not available with the NetPeerTcpBinding.

Streaming und SitzungenStreaming and Sessions

Möglicherweise tritt beim Streaming von Aufrufen mit einer sitzungsbasierten Bindung ein unerwartetes Verhalten auf.You may get unexpected behavior when streaming calls with a session-based binding. Alle Streamingaufrufe erfolgen über einen einzigen Kanal (den Datagrammkanal), der keine Sitzungen unterstützt, selbst wenn die verwendete Bindung für die Verwendung von Sitzungen konfiguriert ist.All streaming calls are made through a single channel (the datagram channel) that does not support sessions even if the binding being used is configured to use sessions. Wenn mehrere Clients Streamingaufrufe an dasselbe Dienstobjekt über eine sitzungsbasierte Bindung durchführen und der Parallelitätsmodus des Dienstobjekts auf „single“ und sein Instanzkontextmodus auf „PerSession“ festgelegt ist, müssen alle Aufrufe den Datagrammkanal passieren, sodass immer nur jeweils ein Aufruf verarbeitet wird.If multiple clients make streaming calls to the same service object over a session-based binding and the service object's concurrency mode is set to single and its instance context mode is set to PerSession, all calls must go through the datagram channel and so only one call is processed at a time. Bei einem oder mehreren Clients kommt es dabei unter Umständen zu einem Timeout. Sie können dieses Problem umgehen, indem Sie entweder den Instanzkontextmodus des Dienstobjekts auf "PerCall" oder die Parallelität auf "Multiple" festlegen.One or more clients may then time out. You can work around this issue by either setting the service object's Instance Context Mode to PerCall or Concurrency to Multiple.

Hinweis

MaxConcurrentSessions hat in diesem Fall keine Auswirkungen, da nur eine "Sitzung" verfügbar ist.MaxConcurrentSessions has no effect in this case because there is only one "session" available.

Aktivieren des StreamingEnabling Streaming

Das Streaming kann in folgender Weise aktiviert werden:You can enable streaming in the following ways:

  • Anforderungen werden im Streamingmodus gesendet und akzeptiert, und Antworten werden im Puffermodus akzeptiert und zurückgegeben (StreamedRequest).Send and accept requests in streaming mode, and accept and return responses in buffered mode (StreamedRequest).

  • Anforderungen werden im Puffermodus gesendet und akzeptiert, und Antworten werden im Streamingmodus akzeptiert und zurückgegeben (StreamedResponse).Send and accept requests in buffered mode, and accept and return responses in streamed mode (StreamedResponse).

  • Anforderungen und Antworten werden in beiden Richtungen im Streamingmodus gesendet und empfangen.Send and receive requests and responses in streamed mode in both directions. (Streamed).(Streamed).

Sie können das Streaming deaktivieren, indem Sie den Übertragungsmodus auf Buffered, die Standardeinstellungen für alle Bindungen, festlegen.You can disable streaming by setting the transfer mode to Buffered, which is the default setting on all bindings. Im folgenden Codebeispiel wird veranschaulicht, wie der Übertragungsmodus in der Konfiguration festgelegt wird.The following code shows how to set the transfer mode in configuration.

<system.serviceModel>  
     …  
    <bindings>  
      <basicHttpBinding>  
        <binding name="ExampleBinding" transferMode="Streaming"/>  
      </basicHttpBinding>  
    </bindings>  
     …  
<system.serviceModel>  

Wenn Sie eine Bindung im Code instanziieren, müssen Sie die jeweilige TransferMode-Eigenschaft der Bindung (oder das Transportbindungselement, wenn Sie eine benutzerdefinierte Bindung erstellen) auf einen der oben erwähnten Werte festlegen.When you instantiate your binding in code, you must set the respective TransferMode property of the binding (or the transport binding element if you are composing a custom binding) to one of the previously mentioned values.

Sie können Streaming ohne Funktionseinschränkung für Anforderungen und Antworten, oder für beide Richtungen unabhängig, auf jeder Seite der Kommunikation aktivieren.You can turn on streaming for requests and replies or for both directions independently at either side of the communicating parties without affecting functionality. Gehen Sie jedoch immer davon aus, dass die übertragene Datenmenge groß genug ist, um eine Aktivierung des Streaming für beide Endpunkte einer Kommunikationsverbindung zu rechtfertigen.However, you should always assume that the transferred data size is so significant that enabling streaming is justified on both endpoints of a communication link. Bei einer plattformübergreifenden Kommunikation, bei der einer der Endpunkte nicht mit WCFWCF implementiert ist, hängt die Fähigkeit zur Verwendung des Streaming von den Streamingfähigkeit der Plattform ab.For cross-platform communication where one of the endpoints is not implemented with WCFWCF, the ability to use streaming depends on the platform's streaming capabilities. Eine weitere seltene Ausnahme kann eine Szenario sein, das auf dem Arbeitsspeicherverbrauch basiert, wobei der Client oder Dienst die Arbeitsseiten minimieren muss und nur geringe Puffergrößen möglich sind.Another rare exception might be a memory-consumption driven scenario where a client or service must minimize its working set and can only afford small buffer sizes.

Aktivieren von asynchronem StreamingEnabling Asynchronous Streaming

Um das asynchrone Streaming zu aktivieren, fügen Sie dem Diensthost das DispatcherSynchronizationBehavior-Endpunktverhalten hinzu und legen dessen AsynchronousSendEnabled-Eigenschaft auf true fest.To enable asynchronous streaming, add the DispatcherSynchronizationBehavior endpoint behavior to the service host and set its AsynchronousSendEnabled property to true. Die Funktion für echtes asynchrones Streaming auf der Senderseite wurde ebenfalls hinzugefügt.We have also added the capability of true asynchronous streaming on the send side. Dies verbessert die Skalierbarkeit des Diensts in Szenarien, in denen Nachrichten an mehrere Clients gestreamt werden, von denen einige eine langsame Lesegeschwindigkeit haben, möglicherweise aufgrund von Netzwerküberlastung, oder überhaupt nicht lesen.This improves scalability of the service in scenarios where it is streaming messages to multiple clients some of which are slow in reading possibly due to network congestion or are not reading at all. In diesen Szenarien werden nicht einzelne Threads für den Dienst pro Client blockiert.In these scenarios we now do not block individual threads on the service per client. Dadurch wird sichergestellt, dass der Dienst in der Lage ist, viel mehr Clients zu verarbeiten und somit die Skalierbarkeit des Diensts zu verbessern.This ensures that the service is able to process many more clients thereby improving the scalability of the service.

Programmiermodell für StreamingübertragungenProgramming Model for Streamed Transfers

Das Programmiermodell für Streaming ist unkompliziert.The programming model for streaming is straightforward. Geben Sie für eingehende Streamingdaten einen Vorgangsvertrag mit einem einzelnen Eingabeparameter vom Typ Stream an.For receiving streamed data, specify an operation contract that has a single Stream typed input parameter. Geben Sie für zurückgehende Streamingdaten einen Stream-Verweis an.For returning streamed data, return a Stream reference.

[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]  
public interface IStreamedService  
{  
    [OperationContract]  
    Stream Echo(Stream data);  
    [OperationContract]  
    Stream RequestInfo(string query);  
    [OperationContract(OneWay=true)]  
    void ProvideInfo(Stream data);  
}  

Im Vorgang Echo im obigen Beispiel wird ein Stream empfangen und zurückgegeben und sollte deshalb für eine Bindung mit Streamed verwendet werden.The operation Echo in the preceding example receives and returns a stream and should therefore be used on a binding with Streamed. Für den Vorgang RequestInfo eignet sich StreamedResponse am besten, da nur Stream zurückgegeben wird.For the operation RequestInfo, StreamedResponse is best suited, because it only returns a Stream. Der unidirektionale Vorgang eignet sich für StreamedRequest am besten.The one-way operation is best suited for StreamedRequest.

Wenn Sie den folgenden Echo- oder ProvideInfo-Vorgängen einen zweiten Parameter hinzufügen, wird das Dienstmodell auf eine Pufferstrategie zurückgesetzt und verwendet die Laufzeitserialisierungsdarstellung des Streams.Note that adding a second parameter to the following Echo or ProvideInfo operations causes the service model to revert back to a buffered strategy and use the run-time serialization representation of the stream. Nur Vorgänge mit einem Eingabestreamparameter sind mit einem End-to-End-Anforderungsstreaming kompatibel.Only operations with a single input stream parameter are compatible with end-to-end request streaming.

Diese Regel gilt in ähnlicher Weise für Nachrichtenverträge.This rule similarly applies to message contracts. Wie im folgenden Nachrichtenvertrag dargestellt, kann der Nachrichtenvertrag nur einen einzigen Textmember enthalten, der ein Stream ist.As shown in the following message contract, you can have only a single body member in your message contract that is a stream. Wenn Sie zusätzliche Informationen mit dem Stream übermitteln möchten, müssen diese Informationen in Nachrichtenheadern übertragen werden.If you want to communicate additional information with the stream, this information must be a carried in message headers. Der Nachrichtentext ist ausschließlich für Streaminginhalt reserviert.The message body is exclusively reserved for the stream content.

[MessageContract]  
public class UploadStreamMessage  
{  
   [MessageHeader]  
   public string appRef;  
   [MessageBodyMember]  
   public Stream data;  
}   

Streamingübertragungen sind beendet und die Nachricht wird geschlossen, wenn der Stream das Ende der Datei (End of File, EOF) erreicht.Streamed transfers end and the message is closed when the stream reaches the end of file (EOF). Beim Senden einer Nachricht (Zurückgeben eines Werts oder Aufrufen eines Vorgangs) können Sie FileStream übergeben. Die WCFWCF-Infrastruktur ruft daraufhin die Daten aus diesem Stream ab, bis er vollständig gelesen wurde und EOF erreicht hat.When sending a message (returning a value or invoking an operation), you can pass a FileStream and the WCFWCF infrastructure subsequently pulls all the data from that stream until the stream has been completely read and reached EOF. Um Streamingdaten für die Quelle zu übertragen, die über keine integrierte, von Stream abgeleitete Klasse dieser Art verfügt, erstellen sie eine solche Klasse, überlagern Sie die Streamquelle mit dieser Klasse, und verwenden Sie das als Argument oder Rückgabewert.To transfer streamed data for the source that no such pre-built Stream derived class exists, construct such a class, overlay that class over your stream source, and use that as the argument or return value.

Beim Empfang einer Nachricht erstellt WCFWCF einen Stream über den Base64-codierten Nachrichtentextinhalt (oder den entsprechenden MIME-Teil bei Verwendung von MTOM), und der Stream erreicht EOF, wenn der Inhalt gelesen wurde.When receiving a message, WCFWCF constructs a stream over the Base64-encoded message body content (or the respective MIME part if using MTOM) and the stream reaches EOF when the content has been read.

Streaming auf Transportebene funktioniert auch mit jedem anderen Nachrichtenvertragstyp (Parameterlisten, Datenvertragsargumente und explizitem Nachrichtenvertrag). Da jedoch die Serialisierung und Deserialisierung von Nachrichten dieses Typs eine Pufferung durch das Serialisierungsprogramm erfordert, ist die Verwendung dieser Vertragsvarianten nicht ratsam.Transport-level streaming also works with any other message contract type (parameter lists, data contract arguments, and explicit message contract), but because the serialization and deserialization of such typed messages requires buffering by the serializer, using such contract variants is not advisable.

Besondere Sicherheitsüberlegungen für umfangreiche DatenSpecial Security Considerations for Large Data

Sie können mit allen Bindungen die Größe eingehender Nachrichten einschränken, um Denial-of-Service-Angriffe zu verhindern.All bindings allow you to constrain the size of incoming messages to prevent denial-of-service attacks. Die BasicHttpBinding, z. B. macht eine System.ServiceModel.BasicHttpBinding.MaxReceivedMessageSize -Eigenschaft, die die Größe der eingehenden Nachricht, beschränkt und damit auch die Höchstmenge an Arbeitsspeicher, auf die zugegriffen wird Beim Verarbeiten der Nachricht.The BasicHttpBinding, for example, exposes a System.ServiceModel.BasicHttpBinding.MaxReceivedMessageSize property that bounds the size of the incoming message, and so also bounds the maximum amount of memory that is accessed when processing the message. Diese Wert wird in Byte festgelegt, mit einem Standardwert von 65.536 Bytes.This unit is set in bytes with a default value of 65,536 bytes.

Ein Sicherheitsrisiko, das speziell beim Streaming umfangreicher Daten entsteht, und einen Denial-of-Service-Angriff bedeuten kann, besteht darin, wenn Daten gepuffert werden, während der Empfänger ein Streaming erwartet.A security threat that is specific to the large data streaming scenario provokes a denial of service by causing data to be buffered when the receiver expects it to be streamed. WCFWCF puffert z. B. immer die SOAP-Header einer Nachricht. Ein Angreifer kann somit eine große Nachricht in böswilliger Absicht erstellen, die ausschließlich aus Headern besteht, um eine Pufferung der Daten zu erzwingen.For example, WCFWCF always buffers the SOAP headers of a message, and so an attacker may construct a large malicious message that consists entirely of headers to force the data to be buffered. Legen Sie bei aktiviertem Streaming MaxReceivedMessageSize auf einen extrem hohen Wert fest, da der Empfänger nicht davon ausgeht, dass die gesamte Nachricht gleichzeitig im Arbeitsspeicher gepuffert wird.When streaming is enabled, the MaxReceivedMessageSize may be set to an extremely large value, because the receiver never expects the entire message to be buffered in memory at once. Wenn WCFWCF zum Puffern der Nachricht gezwungen wird, tritt ein Speicherüberlauf auf.If WCFWCF is forced to buffer the message, a memory overflow occurs.

Deshalb reicht es in diesem Fall nicht aus, die maximale Größe eingehender Nachrichten einzuschränken.Therefore, restricting the maximum incoming message size is not enough in this case. Die von MaxBufferSize gepufferte Menge des Arbeitsspeichers muss mit der WCFWCF-Eigenschaft eingeschränkt werden.The MaxBufferSize property is required to constrain the memory that WCFWCF buffers. Legen Sie beim Streaming dafür einen sicheren Wert fest (oder behalten Sie den Standardwert bei).It is important to set this to a safe value (or keep it at the default value) when streaming. Angenommen, der Dienst muss Dateien bis zu einer Größe von 4 GB empfangen und auf der lokalen Festplatte speichern.For example, suppose your service must receive files up to 4 GB in size and store them on the local disk. Der Arbeitsspeicher ist in diesem Szenario so eingeschränkt, dass immer nur 64 KB gepuffert werden können.Suppose also that your memory is constrained in such a way that you can only buffer 64 KB of data at a time. Sie würden dann MaxReceivedMessageSize auf 4 GB und MaxBufferSize auf 64 KB festlegen.Then you would set the MaxReceivedMessageSize to 4 GB and MaxBufferSize to 64 KB. Außerdem müssen Sie in der Dienstimplementierung sicherstellen, dass nur aus dem eingehenden Stream in 64-KB-Segmenten gelesen wird und das nächste Segment erst gelesen wird, nachdem das vorherige auf die Festplatte geschrieben wurde und es dann aus dem Arbeitspeicher gelöscht wird.Also, in your service implementation, you must ensure that you read only from the incoming stream in 64-KB chunks and do not read the next chunk before the previous one has been written to disk and discarded from memory.

Beachten Sie, dass dieses Kontingent nur die Pufferung in WCFWCF einschränkt, jedoch keinen Schutz bietet, wenn Sie eine Pufferung in einem eigenen Dienst oder der Clientimplementierung ausführen.It is also important to understand that this quota only limits the buffering done by WCFWCF and cannot protect you against any buffering that you do in your own service or client implementation. Weitere Informationen finden Sie unterFor more information aboutWeitere Überlegungen zur Sicherheit, finden Sie unter Sicherheitsüberlegungen zu Daten. additional security considerations, see Security Considerations for Data.

Hinweis

Die Entscheidung über die Verwendung der gepufferten oder der Streamingübertragung wird lokal am Endpunkt getroffen.The decision to use either buffered or streamed transfers is a local decision of the endpoint. 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 and other intermediaries. Das Festlegen des Übertragungsmodus spiegelt sich nicht in der Beschreibung der Dienstschnittstelle wider.Setting the transfer mode is not reflected in the description of the service interface. Nachdem Sie einen WCFWCF-Client für einen Dienst erstellt haben, müssen Sie die Konfigurationsdatei für Dienste bearbeiten, die mit Streamingübertragungen verwendet werden sollen, um den Modus festzulegen.After generating a WCFWCF client to a service, you must edit the configuration file for services intended to be used with streamed transfers to set the 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.

Siehe auchSee Also

Vorgehensweise: Aktivieren von StreamingHow to: Enable Streaming