Auswählen eines NachrichtenencodersChoosing a Message Encoder

In diesem Thema werden die Kriterien für die Auswahl eines in Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) enthaltenen Encoders beschrieben: Binärdaten, Textdaten und MTOM (Message Transmission Optimization Mechanism).This topic discusses criteria for choosing among the message encoders that are included in Windows Communication Foundation (WCF)Windows Communication Foundation (WCF): binary, text, and Message Transmission Optimization Mechanism (MTOM).

In WCFWCF, geben Sie an, wie Daten in einem Netzwerk zwischen Endpunkten übertragen einer Bindung, besteht aus einer Folge von Bindungselementen.In WCFWCF, you specify how to transfer data across a network between endpoints by means of a binding, which is made up of a sequence of binding elements. Ein Nachrichtenencoder wird von einem Nachrichtencodierungs-Bindungselement im Bindungsstapel dargestellt.A message encoder is represented by a message encoding binding element in the binding stack. Eine Bindung enthält optionale Protokollbindungselemente, wie ein Sicherheitsbindungselement oder ein zuverlässiges Nachrichtenbindungselement, ein erforderliches Nachrichtencodierungs-Bindungselement und ein erforderliches Transportbindungselement.A binding includes optional protocol binding elements, such as a security binding element or reliable messaging binding element, a required message encoding binding element, and a required transport binding element.

Das Nachrichtencodierungs-Bindungselement befindet sich unter den optionalen Protokollbindungselementen und über dem erforderlichen Transportbindungselement.The message encoding binding element sits below the optional protocol binding elements and above the required transport binding element. Auf der ausgehenden Seite serialisiert ein Nachrichtenencoder die ausgehende Message und übergibt sie an den Transport.On the outgoing side, a message encoder serializes the outgoing Message and passes it to the transport. Auf der eingehenden Seite ruft ein Nachrichtenencoder die serialisierte Form einer Message aus dem Transport ab und übergibt sie an die höhere Protokollschicht, falls vorhanden, oder andernfalls an die Anwendung.On the incoming side, a message encoder receives the serialized form of a Message from the transport and passes it to the higher protocol layer, if present, or to the application, if not.

Wenn Sie eine Verbindung mit einem zuvor vorhandenen Client oder Server herstellen, haben Sie eventuell keine Wahl, ob Sie eine bestimmte Nachrichtencodierung verwenden möchten, da Sie Ihre Nachrichten auf eine Weise codieren müssen, die von der anderen Seite erwartet wird.When connecting to a pre-existing client or server, you may not have a choice about using a particular message encoding since you need to encode your messages in a way that the other side is expecting. Wenn Sie jedoch einen WCFWCF-Dienst schreiben, können Sie Ihren Dienst über mehrere Endpunkte verfügbar machen, von denen jeder eine andere Nachrichtencodierung verwendet.However, if you are writing an WCFWCF service, you can expose your service through multiple endpoints, each using a different message encoding. So können Clients die beste Codierung für die Kommunikation mit Ihrem Dienst über den am besten geeigneten Endpunkt auswählen. Außerdem verfügen Sie dann über die Flexibilität, die für die Clients am besten geeignete Codierung auszuwählen.This allows clients to choose the best encoding for talking to your service over the endpoint that is best for them, as well as giving your clients the flexibility to choose the encoding that is best for them. Die Verwendung von mehreren Endpunkten ermöglicht Ihnen, die Vorteile anderer Nachrichtencodierungen mit anderen Bindungselementen zu kombinieren.Using multiple endpoints also allows you to combine the advantages of different message encodings with other binding elements.

Vom System bereitgestellte EncoderSystem-Provided Encoders

WCFWCF schließt drei Nachrichtenencoder ein, die durch die folgenden drei Klassen dargestellt werden: includes three message encoders, which are represented by the following three classes:

  • TextMessageEncodingBindingElement, der Textnachrichtenencoder, unterstützt sowohl reine XML-Codierung als auch SOAP-Codierung.TextMessageEncodingBindingElement, the text message encoder, supports both plain XML encoding and SOAP encoding. Der reine XML-Codierungsmodus des Textnachrichtenencoders wird als "Plain Old XML" (POX) bezeichnet, um ihn von der textbasierten SOAP-Codierung zu unterscheiden.The plain XML encoding mode of the text message encoder is called "plain old XML" (POX) to distinguish it from text-based SOAP encoding. Um POX zu aktivieren, legen Sie die MessageVersion-Eigenschaft auf None fest.To enable POX, set the MessageVersion property to None. Verwenden Sie den Textnachrichtenencoder, um mit anderen Endpunkten zusammenzuarbeiten als mit WCFWCF-Endpunkten.Use the text message encoder to interoperate with non-WCFWCF endpoints.

  • BinaryMessageEncodingBindingElement, der binäre Nachrichtenencoder, verwendet ein kompaktes binäres Format und ist für die Kommunikation zwischen WCFWCF und WCFWCF optimiert und daher nicht interoperabel.BinaryMessageEncodingBindingElement, the binary message encoder, uses a compact binary format and is optimized for WCFWCF to WCFWCF communication, and hence is not interoperable. Dies ist auch der leistungsstärkste Encoder, der von WCFWCF bereitgestellt wird.This is also the most performant encoder of all the encoders WCFWCF provides.

  • <System.ServiceModel.Channels.MTOMMessageEncodingBindingElement>, das Bindungselement gibt an, das die zeichencodierung und Nachrichtenversion für Nachrichten mit MTOM-Codierung.< System.ServiceModel.Channels.MTOMMessageEncodingBindingElement>, the binding element, specifies the character encoding and message versioning for messages using MTOM encoding. MTOM ist eine effiziente Technologie zum Senden von Binärdaten in WCFWCF-Meldungen.MTOM is an efficient technology for transmitting binary data in WCFWCF messages. Der MTOM-Encoder versucht, einen Ausgleich zwischen Effizienz und Interoperabilität zu schaffen.The MTOM encoder attempts to create a balance between efficiency and interoperability. Die MTOM-Verschlüsselung überträgt die meisten XML-Daten in Textform, optimiert aber große Binärdatenblöcke durch Übertragung ohne Textkonvertierung.The MTOM encoding transmits most XML in textual form, but optimizes large blocks of binary data by transmitting them as-is, without conversion to text. Hinsichtlich Effizienz steht MTOM unter den von WCFWCF bereitgestellten Encodern zwischen Text (dem langsamsten Encoder) und Binärdaten (dem schnellsten Encoder).In terms of efficiency, among the encoders WCFWCF provides, MTOM is in-between text (the slowest) and binary (the fastest).

So wählen Sie einen Nachrichtenencoder ausHow to Choose a Message Encoder

In der folgenden Tabelle werden allgemeine Faktoren beschrieben, die bei der Auswahl eines Nachrichtenencoders berücksichtigt werden.The following table describes common factors used to choose a message encoder. Priorisieren Sie die Faktoren, die für Ihre Anwendung wichtig sind, und wählen Sie dann die Nachrichtenencoder aus, die mit diesen Faktoren am besten funktionieren.Prioritize the factors that are important for your application, and then choose the message encoders that work best with these factors. Berücksichtigen Sie alle weiteren, in dieser Tabelle nicht aufgelisteten Faktoren sowie alle benutzerdefinierten Encoder, die eventuell für Ihre Anwendung erforderlich sind.Be sure to consider any additional factors not listed in this table and any custom message encoders that may be required in your application.

FaktorFactor BeschreibungDescription Encoder, die diesen Faktor unterstützenEncoders that support this factor
Unterstützte ZeichensätzeSupported Character Sets TextMessageEncodingBindingElementund < System.ServiceModel.Channels.MTOMMessageEncodingBindingElement> nur die UTF8- und UTF16-Unicode-Unterstützung (big-Endian- und little-Endian-) Codierungen.TextMessageEncodingBindingElement and < System.ServiceModel.Channels.MTOMMessageEncodingBindingElement> support only the UTF8 and UTF16 Unicode (big-endian and little-endian) encodings. Sind andere Codierungen erforderlich (beispielsweise UTF7 oder ASCII), muss ein benutzerdefinierter Encoder verwendet werden.If other encodings are required, such as UTF7 or ASCII, a custom encoder must be used. Ein Beispiel benutzerdefinierter Encoder, finden Sie unter benutzerdefinierter Nachrichtenencoder.For a sample custom encoder, see Custom Message Encoder. TextText
InspektionInspection Inspektion ist die Fähigkeit, Nachrichten während der Übertragung zu untersuchen.Inspection is the ability to examine messages during transmission. Textcodierungem, entweder mit oder ohne die Verwendung von SOAP, ermöglichen die Inspektion und Analyse von Nachrichten mit vielen Anwendungen, ohne spezielle Tools zu verwenden.Text encodings, either with or without the use of SOAP, allow messages to be inspected and analyzed by many applications without the use of specialized tools. Beachten Sie, dass sich die Verwendung der Übertragungssicherheit, entweder auf Nachrichten- oder auf Transportebene, auf die Inspektionsfähigkeit der Nachrichten auswirkt.Note that the use of transfer security, at either the message or transport level, affects your ability to inspect messages. Vertraulichkeit schützt eine Nachricht davor, untersucht zu werden, und Integrität schützt eine Nachricht davor, geändert zu werden.Confidentiality protects a message from being examined and integrity protects a message from being modified. TextText
ZuverlässigkeitReliability Zuverlässigkeit ist die Widerstandsfähigkeit eines Encoders gegen Übertragungsfehler.Reliability is the resiliency of an encoder to transmission errors. Zuverlässigkeit kann auch auf Nachrichten-, Transport- oder Anwendungsebene bereitgestellt werden.Reliability can also be provided at the message, transport, or application layer. Bei allen WCFWCF-Standardencodern wird davon ausgegangen, dass eine andere Ebene die Zuverlässigkeit bietet.All of the standard WCFWCF encoders assume that another layer is providing reliability. Der Encoder hat wenige Möglichkeiten, nach einem Übertragungsfehler eine Wiederherstellung durchzuführen.The encoder has little ability to recover from a transmission error. KeinerNone
EinfachheitSimplicity Einfachheit stellt die Leichtigkeit dar, mit der Sie Encoder und Decoder für eine Codierungsspezifikation erstellen können.Simplicity represents the ease with which you can create encoders and decoders for an encoding specification. Textcodierungen sind besonders vorteilhaft für die Einfachheit. Die POX-Textcodierung hat den zusätzlichen Vorteil, dass keine Unterstützung der SOAP-Verarbeitung erforderlich ist.Text encodings are particularly advantageous for simplicity, and the POX text encoding has the additional advantage of not requiring support for processing SOAP. Text (POX)Text (POX)
GrößeSize Die Codierung bestimmt den Mehraufwand für den Inhalt.The encoding determines the amount of overhead imposed on content. Die Größe der codierten Nachrichten bezieht sich direkt auf den maximalen Durchsatz von Dienstvorgängen.The size of encoded messages is directly related to the maximum throughput of service operations. Binäre Codierungen sind im Allgemeinen kompakter als Textcodierungen.Binary encodings are generally more compact than text encodings. Wenn die Nachrichtengröße ein Maximum erreicht hat, sollten Sie auch eine Komprimierung des Nachrichteninhalts während der Codierung in Erwägung ziehen.When message size is at a premium, consider also compressing the message contents during encoding. Durch die Komprimierung entstehen jedoch höhere Verarbeitungskosten für den Absender und den Empfänger der Nachricht.However, compression adds processing costs for both the message sender and receiver. BinärBinary
StreamingStreaming Streaming ermöglicht Anwendungen, mit der Verarbeitung einer Nachricht zu beginnen, bevor die ganze Nachricht angekommen ist.Streaming allows applications to begin processing a message before the entire message has arrived. Wenn Sie das Streaming effektiv anwenden möchten, ist es erforderlich, dass die wichtigen Daten einer Nachricht am Anfang der Nachricht zur Verfügung stehen, sodass die empfangende Anwendung nicht warten muss, bis die Nachricht ankommt.Effectively using streaming requires that the important data for a message be available at the beginning of the message so that the receiving application is not required to wait for it to arrive. Außerdem müssen Anwendungen, die eine Übertragung per Stream nutzen, die Daten in der Nachricht inkrementell organisieren, damit der Inhalt keine Weiterleitungsabhängigkeiten aufweist.Moreover, applications that use streamed transfer must organize data in the message incrementally so that the content does not have forward dependencies. In vielen Fällen müssen Sie einen Kompromiss schließen zwischen dem Streaminginhalt und der kleinstmöglichen Übertragungsgröße dieses Inhalts.In many cases, you must compromise between streaming content and having the smallest possible transfer size for that content. KeinerNone
Unterstützung von Drittanbietertools3rd Party Tool Support Unterstützungsbereiche für eine Codierung umfassen Entwicklung und Diagnose.Support areas for an encoding include development and diagnosis. Drittanbieter haben viel investiert in Bibliotheken und Toolkits zur Verarbeitung von Nachrichten, die im POX-Format codiert sind.Third-party developers have made a large investment in libraries and toolkits for handling messages encoded in the POX format. Text (POX)Text (POX)
InteroperabilitätInteroperability Dieser Faktor bezieht sich auf die Fähigkeit eines WCFWCF-Encoders, mit WCFWCF-Diensten zu interoperieren.This factor refers to the ability of a WCFWCF encoder to interoperate with non-WCFWCF services. TextText

MTOM (teilweise)MTOM (partial)

Hinweis: Bei Verwendung des Binärencoders hat die IgnoreWhitespace-Einstellung keine Auswirkung, wenn ein XML-Reader erstellt wird.Note: When using the Binary Encoder, using the IgnoreWhitespace setting when creating a XMLReader will have no effect. Angenommen, in einem Dienstvorgang wird Folgendes ausgeführt:For example, if you do the following inside a service operation:

public void OperationContract(XElement input)
{
    Console.WriteLine("{0}", input.Value);
    int counter = 0;
    var xreader = input.CreateReader();
    var reader = XmlReader.Create(xreader, new XmlReaderSettings() { IgnoreWhitespace = true });
    while (reader.Read())
    {
        counter++;
    }

    Console.WriteLine("Read {0} lines with reader", counter);
}

Die IgnoreWhitespace-Einstellung wird ignoriert.The IgnoreWhitespace setting is ignored.

Komprimierung und binärer EncoderCompression and the Binary Encoder

Ab WCF 4.5 bietet der binäre WCF-Encoder Komprimierungsunterstützung.Beginning with WCF 4.5 the WCF binary encoder adds support for compression. Dies ermöglicht es Ihnen, den gzip/deflate-Algorithmus zum Senden komprimierter Nachrichten von einem WCF-Client zu senden und mit komprimierten Nachrichten von einem selbst gehosteten WCF-Dienst zu antworten.This enables you to use the gzip/deflate algorithm for sending compressed messages from a WCF client and also respond with compressed messages from a self-hosted WCF service. Diese Funktion ermöglicht die Komprimierung bei HTTP- und TCP-Transporten.This feature enables compression on both the HTTP and TCP transports. Ein IIS-gehosteter WCF-Dienst kann immer durch Konfigurieren des IIS-Hostservers zum Senden von komprimierten Antworten befähigt werden.An IIS hosted WCF service can always be enabled for sending compressed responses by configuring the IIS host server. Der Komprimierungstyp wird mit der BinaryMessageEncodingBindingElement.CompressionFormat-Eigenschaft konfiguriert.The type of compression is configured with the BinaryMessageEncodingBindingElement.CompressionFormat property. Diese Eigenschaft wird auf einen der System.ServiceModel.Channels.CompressionFormat-Enumerationswerte festgelegt:This property is set to one of the System.ServiceModel.Channels.CompressionFormat enum values:

  • CompressionFormat.Deflate
  • CompressionFormat.GZip
  • CompressionFormat.None

Da diese Eigenschaft nur auf die BinaryMessageEncodingBindingElement verfügbar gemacht wird, müssen Sie zum Erstellen einer benutzerdefinierten Bindung wie folgt, um dieses Feature verwenden:Since this property is only exposed on the binaryMessageEncodingBindingElement, you will need to create a custom binding like the following to use this feature:

<customBinding>
  <binding name="BinaryCompressionBinding">
    <binaryMessageEncoding compressionFormat ="GZip" />
    <httpTransport />
 </binding>
</customBinding>

Sowohl der Client als auch der Dienst zum Senden und Empfangen von komprimierten Nachrichten zustimmen müssen, und aus diesem Grund muss die CompressionFormat-Eigenschaft auf das Element BinaryMessageEncoding auf Client und Dienst konfiguriert werden.Both the client and the service need to agree to send and receive compressed messages and therefore the compressionFormat property must be configured on the binaryMessageEncoding element on both client and service. Eine ProtocolException wird ausgelöst, wenn der Dienst oder der Client nicht für die Komprimierung konfiguriert wurde, die andere Seite jedoch schon. Das Aktivieren der Komprimierung sollte sorgfältig überlegt werden.A ProtocolException is thrown if either the service or client is not configured for compression but the other side is.Enabling compression should be carefully considered. Die Komprimierung ist vor allem dann nützlich, wenn die Netzwerkbandbreite beschränkt ist.Compression is mostly useful if network bandwidth is a bottleneck. Wenn die CPU der Engpass ist, mindert die Komprimierung den Durchsatz.In the case where the CPU is the bottleneck, compression will decrease throughput. Es müssen entsprechende Tests in einer simulierten Umgebung ausgeführt werden, um zu ermitteln, ob dies für die Anwendung Vorteile erbringt.Appropriate testing must be done in a simulated environment to find out if this benefits the application

Siehe auchSee Also

BindungenBindings