Een berichtcoderingsprogramma kiezen
In dit artikel worden criteria besproken voor het kiezen van een van de berichtcoderingsprogramma's die zijn opgenomen in Windows Communication Foundation (WCF): binair, tekst en Message Transmission Optimization Mechanism (MTOM).
In WCF geeft u op hoe u gegevens overbrengt over een netwerk tussen eindpunten door middel van een binding, die bestaat uit een reeks bindingselementen. Een berichtcoderingsprogramma wordt vertegenwoordigd door een bindingselement voor berichtcodering in de bindingsstack. Een binding bevat optionele protocolbindingselementen, zoals een beveiligingsbindingselement of een betrouwbaar berichtbindingselement, een vereist berichtcoderingselement en een vereist transportbindingselement.
Het bindingselement voor berichtcodering bevindt zich onder de optionele protocolbindingselementen en boven het vereiste transportbindingselement. Aan de uitgaande zijde serialiseert een berichtcoderingsprogramma de uitgaande Message gegevens en geeft deze door aan het transport. Aan de binnenkomende zijde ontvangt een berichtcoderingsprogramma de geserialiseerde vorm van een Message van het transport en geeft deze door aan de hogere protocollaag, indien aanwezig of aan de toepassing, als dat niet het geval is.
Wanneer u verbinding maakt met een bestaande client of server, hebt u mogelijk geen keuze over het gebruik van een bepaalde berichtcodering, omdat u uw berichten op een manier moet coderen die aan de andere kant wordt verwacht. Als u echter een WCF-service schrijft, kunt u uw service beschikbaar maken via meerdere eindpunten, elk met behulp van een andere berichtcodering. Hierdoor kunnen clients de beste codering kiezen om met uw service te praten via het eindpunt dat het beste voor hen is, en uw klanten de flexibiliteit bieden om de codering te kiezen die het beste voor hen is. Als u meerdere eindpunten gebruikt, kunt u ook de voordelen van verschillende berichtcoderingen combineren met andere bindingselementen.
Door het systeem geleverde coderingsprogramma's
WCF bevat drie berichtcoderingsprogramma's, die worden vertegenwoordigd door de volgende drie klassen:
TextMessageEncodingBindingElement, de coderingsprogramma voor tekstberichten ondersteunt zowel xml-codering zonder opmaak als SOAP-codering. De xml-coderingsmodus zonder opmaak van de coderingsmodus voor tekstberichten wordt 'gewone oude XML' (POX) genoemd om deze te onderscheiden van soap-codering op basis van tekst. Als u POX wilt inschakelen, stelt u de MessageVersion eigenschap in op None. Gebruik de encoder voor tekstberichten om te samenwerken met niet-WCF-eindpunten.
BinaryMessageEncodingBindingElement, de binaire bericht coderingsprogramma, maakt gebruik van een compacte binaire indeling en is geoptimaliseerd voor WCF naar WCF-communicatie, en is daarom niet interoperabel. Dit is ook de meest presterende encoder van alle encoders die WCF biedt.
MtomMessageEncodingBindingElement, het bindingselement, geeft het tekencodering en berichtversiebeheer voor berichten op met behulp van MTOM-codering. MTOM is een efficiënte technologie voor het verzenden van binaire gegevens in WCF-berichten. De MTOM-encoder probeert een balans te creëren tussen efficiëntie en interoperabiliteit. De MTOM-codering verzendt de meeste XML in tekstvorm, maar optimaliseert grote blokken binaire gegevens door ze ongewijzigd te verzenden, zonder conversie naar tekst. Wat de efficiëntie betreft, is MTOM tussen tekst (de traagste) en het binaire bestand (de snelste) van de encoders WCF.
Een berichtcoderingsprogramma kiezen
In de volgende tabel worden veelvoorkomende factoren beschreven die worden gebruikt om een berichtcoderingsprogramma te kiezen. Geef prioriteit aan de factoren die belangrijk zijn voor uw toepassing en kies vervolgens de berichtcoderingsprogramma's die het beste werken met deze factoren. Houd rekening met eventuele aanvullende factoren die niet in deze tabel worden vermeld en eventuele aangepaste berichtcoderingsprogramma's die mogelijk vereist zijn in uw toepassing.
Factor | Beschrijving | Encoders die deze factor ondersteunen |
---|---|---|
Ondersteunde tekensets | TextMessageEncodingBindingElement en MtomMessageEncodingBindingElement alleen de UTF8- en UTF16 Unicode-coderingen (big-endian en little-endian) ondersteunen. Als andere coderingen vereist zijn, zoals UTF7 of ASCII, moet er een aangepaste coderingsprogramma worden gebruikt. Zie Custom Message Encoder voor een voorbeeld van een aangepast coderingsprogramma. | Sms verzenden |
Inspectie | Inspectie is de mogelijkheid om berichten tijdens verzending te onderzoeken. Met tekstcoderingen, hetzij met of zonder het gebruik van SOAP, kunnen berichten door veel toepassingen worden geïnspecteerd en geanalyseerd zonder gebruik te maken van gespecialiseerde hulpprogramma's. Het gebruik van overdrachtsbeveiliging, op bericht- of transportniveau, is van invloed op uw mogelijkheid om berichten te inspecteren. Vertrouwelijkheid beschermt een bericht tegen onderzoek en integriteit beschermt een bericht tegen wijziging. | Sms verzenden |
Betrouwbaarheid | Betrouwbaarheid is de tolerantie van een encoder voor verzendingsfouten. Betrouwbaarheid kan ook worden geboden op de bericht-, transport- of toepassingslaag. Alle standaard WCF-coderingsprogramma's gaan ervan uit dat een andere laag betrouwbaarheid biedt. De encoder heeft weinig mogelijkheden om te herstellen van een overdrachtsfout. | Geen |
Eenvoud | Eenvoud vertegenwoordigt het gemak waarmee u coderingsprogramma's en decoders voor een coderingsspecificatie kunt maken. Tekstcoderingen zijn bijzonder voordelig voor eenvoud en de POX-tekstcodering heeft het extra voordeel dat u geen ondersteuning nodig hebt voor het verwerken van SOAP. | Tekst (POX) |
Tekengrootte | De codering bepaalt de hoeveelheid overhead die wordt opgelegd aan inhoud. De grootte van gecodeerde berichten is rechtstreeks gerelateerd aan de maximale doorvoer van servicebewerkingen. Binaire coderingen zijn over het algemeen compacter dan tekstcoderingen. Wanneer de berichtgrootte een Premium-abonnement heeft, kunt u ook overwegen om de inhoud van het bericht tijdens de codering te comprimeren. Compressie voegt echter verwerkingskosten toe voor zowel de afzender van het bericht als de ontvanger. | Binary |
Streaming | Met streaming kunnen toepassingen beginnen met het verwerken van een bericht voordat het hele bericht is aangekomen. Voor het effectief gebruik van streaming is vereist dat de belangrijke gegevens voor een bericht beschikbaar zijn aan het begin van het bericht, zodat de ontvangende toepassing niet hoeft te wachten totdat het bericht binnenkomt. Bovendien moeten toepassingen die gebruikmaken van gestreamde overdracht gegevens in het bericht incrementeel organiseren, zodat de inhoud geen doorstuurafhankelijkheden heeft. In veel gevallen moet u inbreuk maken tussen streaming-inhoud en de kleinste mogelijke overdrachtsgrootte voor die inhoud hebben. | Geen |
Ondersteuning voor hulpprogramma's van derden | Ondersteuningsgebieden voor een codering omvatten ontwikkeling en diagnose. Externe ontwikkelaars hebben veel geïnvesteerd in bibliotheken en toolkits voor het verwerken van berichten die zijn gecodeerd in de POX-indeling. | Tekst (POX) |
Interoperabiliteit | Deze factor verwijst naar de mogelijkheid van een WCF-encoder om te samenwerken met niet-WCF-services. | Sms verzenden MTOM (gedeeltelijk) |
Opmerking: Wanneer u de Binary Encoder gebruikt, heeft het gebruik van de instelling IgnoreWhitespace bij het maken van een XMLReader geen effect. Als u bijvoorbeeld het volgende doet binnen een servicebewerking:
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);
}
De instelling IgnoreWhitespace wordt genegeerd.
Compressie en het binaire coderingsprogramma
Vanaf WCF 4.5 voegt de binaire WCF-encoder ondersteuning toe voor compressie. Hiermee kunt u het gzip/deflate algoritme gebruiken voor het verzenden van gecomprimeerde berichten vanaf een WCF-client en ook reageren met gecomprimeerde berichten van een zelf-hostende WCF-service. Deze functie maakt compressie mogelijk voor zowel http- als TCP-transporten. Een IIS-gehoste WCF-service kan altijd worden ingeschakeld voor het verzenden van gecomprimeerde antwoorden door de IIS-hostserver te configureren. Het type compressie wordt geconfigureerd met de BinaryMessageEncodingBindingElement.CompressionFormat eigenschap. Deze eigenschap is ingesteld op een van de System.ServiceModel.Channels.CompressionFormat enum-waarden:
Aangezien deze eigenschap alleen beschikbaar is op het binaryMessageEncodingBindingElement, moet u een aangepaste binding maken zoals hieronder om deze functie te kunnen gebruiken:
<customBinding>
<binding name="BinaryCompressionBinding">
<binaryMessageEncoding compressionFormat ="GZip" />
<httpTransport />
</binding>
</customBinding>
Zowel de client als de service moeten akkoord gaan met het verzenden en ontvangen van gecomprimeerde berichten en daarom moet de eigenschap compressionFormat worden geconfigureerd op het binaryMessageEncoding-element op zowel de client als de service. Er wordt een ProtocolException gegenereerd als de service of client niet is geconfigureerd voor compressie, maar de andere kant wel. Het inschakelen van compressie moet zorgvuldig worden overwogen. Compressie is meestal handig als netwerkbandbreedte een knelpunt is. In het geval dat de CPU het knelpunt is, vermindert compressie de doorvoer. Er moet een juiste test worden uitgevoerd in een gesimuleerde omgeving om erachter te komen of dit de toepassing ten goede komt