Volba kodéru zpráv

Tento článek popisuje kritéria pro výběr mezi kodéry zpráv, které jsou součástí windows Communication Foundation (WCF): binární, text a mechanismus optimalizace přenosu zpráv (MTOM).

Ve WCF určíte, jak přenášet data přes síť mezi koncovými body pomocí vazby, která se skládá z posloupnosti vazeb prvků. Kodér zpráv je reprezentován elementem vazby kódování zpráv v zásobníku vazeb. Vazba zahrnuje volitelné elementy vazby protokolu, jako je element vazby zabezpečení nebo spolehlivý element vazby zasílání zpráv, požadovaný element vazby kódování zpráv a požadovaný prvek vazby přenosu.

Element vazby kódování zprávy se nachází pod volitelnými prvky vazby protokolu a nad požadovaným elementem vazby přenosu. Na odchozí straně kodér zpráv serializuje odchozí Message a předává ho do přenosu. Na straně příchozí pošty kodér zpráv obdrží serializovanou formu Message přenosu a předá ji do vyšší vrstvy protokolu, pokud je k dispozici, nebo do aplikace, pokud ne.

Při připojování k existujícímu klientovi nebo serveru možná nemáte na výběr použití konkrétního kódování zpráv, protože potřebujete zprávy zakódovat způsobem, který očekává druhá strana. Pokud ale píšete službu WCF, můžete službu zveřejnit prostřednictvím více koncových bodů, z nichž každá používá jiné kódování zpráv. Klienti tak můžou zvolit nejlepší kódování pro komunikaci s vaší službou přes koncový bod, který je pro ně nejvhodnější, a zajistit tak klientům flexibilitu při výběru kódování, které je pro ně nejvhodnější. Použití více koncových bodů také umožňuje kombinovat výhody různých kódování zpráv s jinými prvky vazby.

Kodéry poskytované systémem

WCF obsahuje tři kodéry zpráv, které jsou reprezentovány následujícími třemi třídami:

  • TextMessageEncodingBindingElement, kodér textových zpráv podporuje prosté kódování XML i kódování SOAP. Režim kódování prostého KÓDU XML kodéru textových zpráv se nazývá "plain old XML" (POX), aby se odlišil od kódování SOAP založeného na textu. Chcete-li povolit POX, nastavte MessageVersion vlastnost na Nonehodnotu . Pomocí kodéru textových zpráv můžete spolupracovat s koncovými body bez WCF.

  • BinaryMessageEncodingBindingElement, binární kodér zpráv používá kompaktní binární formát a je optimalizovaný pro komunikaci WCF wcf, a proto není interoperabilní. Jedná se také o nejvýkonnější kodér všech kodérů, které WCF poskytuje.

  • MtomMessageEncodingBindingElement, element vazby určuje kódování znaků a správu verzí zpráv pro zprávy pomocí kódování MTOM. MTOM je efektivní technologie pro přenos binárních dat ve zprávách WCF. Kodér MTOM se pokouší vytvořit rovnováhu mezi efektivitou a interoperabilitou. Kódování MTOM přenáší většinu XML v textové podobě, ale optimalizuje velké bloky binárních dat tak, že je přenáší tak, jak je, bez převodu na text. Z hlediska efektivity poskytuje WCF kodéry MTOM mezi textem (nejpomalejším) a binárním (nejrychlejším).

Jak zvolit kodér zpráv

Následující tabulka popisuje běžné faktory používané k výběru kodéru zpráv. Určete prioritu faktorů, které jsou pro vaši aplikaci důležité, a pak zvolte kodéry zpráv, které s těmito faktory fungují nejlépe. Nezapomeňte vzít v úvahu všechny další faktory, které nejsou uvedené v této tabulce, a všechny vlastní kodéry zpráv, které mohou být vyžadovány ve vaší aplikaci.

Faktor Popis Kodéry podporující tento faktor
Podporované znakové sady TextMessageEncodingBindingElement a MtomMessageEncodingBindingElement podporují pouze kódování UTF8 a UTF16 Unicode (big-endian a little-endian). Pokud se vyžadují jiné kódování, například UTF7 nebo ASCII, musí se použít vlastní kodér. Ukázkový vlastní kodér najdete v tématu Vlastní kodér zpráv. Text
Kontrola Kontrola je schopnost zkoumat zprávy během přenosu. Kódování textu, ať už s použitím protokolu SOAP nebo bez použití protokolu SOAP, umožňují kontrolovat a analyzovat zprávy mnoha aplikacemi bez použití specializovaných nástrojů. Použití zabezpečení přenosu na úrovni zprávy nebo přenosu ovlivňuje vaši schopnost kontrolovat zprávy. Důvěrnost chrání zprávu před zkoumáním a integritou chrání zprávu před úpravou. Text
Spolehlivost Spolehlivost je odolnost kodéru vůči chybám přenosu. Spolehlivost lze také poskytnout ve zprávě, přenosu nebo aplikační vrstvě. Všechny standardní kodéry WCF předpokládají, že další vrstva poskytuje spolehlivost. Kodér má malou schopnost zotavit se z chyby přenosu. Nic
Jednoduchost Jednoduchost představuje jednoduchost, pomocí které můžete vytvářet kodéry a dekodéry pro specifikaci kódování. Kódování textu je zvláště výhodné pro jednoduchost a kódování textu POX má další výhodu, že nevyžaduje podporu pro zpracování protokolu SOAP. Text (POX)
Velikost Kódování určuje množství režie uložené na obsahu. Velikost zakódovaných zpráv přímo souvisí s maximální propustností operací služby. Binární kódování jsou obecně kompaktnější než kódování textu. Pokud je velikost zprávy na úrovni Premium, zvažte také komprimaci obsahu zprávy během kódování. Komprese ale přidává náklady na zpracování pro odesílatele zprávy i příjemce. Binární
Streamování Streamování umožňuje aplikacím začít zpracovávat zprávu před příchodem celé zprávy. Efektivní použití streamování vyžaduje, aby důležitá data pro zprávu byla k dispozici na začátku zprávy, aby přijímající aplikace nemusela čekat na doručení. Aplikace, které používají streamovaný přenos, navíc musí data ve zprávě uspořádat přírůstkově, aby obsah neměl závislosti předávání. V mnoha případech musíte ohrozit přenos mezi streamovaným obsahem a nejmenší možnou velikostí přenosu pro daný obsah. Nic
Podpora nástrojů třetích stran Mezi oblasti podpory kódování patří vývoj a diagnostika. Vývojáři třetích stran investovali do knihoven a sad nástrojů pro zpracování zpráv kódovaných ve formátu POX. Text (POX)
Vzájemná funkční spolupráce Tento faktor odkazuje na schopnost kodéru WCF spolupracovat se službami, které nejsou službami WCF. Text

MTOM (částečná)

Poznámka: Při použití binárního kodéru nebude použití ignoreWhitespace nastavení při vytváření XMLReader mít žádný vliv. Pokud například v rámci operace služby provedete následující kroky:

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);
}

Nastavení IgnoreWhitespace je ignorováno.

Komprese a binární kodér

Počínaje WCF 4.5 binární kodér WCF přidává podporu komprese. To vám umožní použít algoritmus gzip/deflate pro odesílání komprimovaných zpráv z klienta WCF a také odpověď s komprimovanými zprávami ze služby WCF v místním prostředí. Tato funkce umožňuje kompresi přenosů HTTP i TCP. Služba WCF hostovaná službou IIS může být vždy povolena pro odesílání komprimovaných odpovědí konfigurací hostitelského serveru služby IIS. Typ komprese je nakonfigurován s BinaryMessageEncodingBindingElement.CompressionFormat vlastností. Tato vlastnost je nastavená na jednu z hodnot výčtu System.ServiceModel.Channels.CompressionFormat :

Vzhledem k tomu, že tato vlastnost je vystavena pouze v binaryMessageEncodingBindingElement, budete muset vytvořit vlastní vazbu jako následující, aby bylo možné použít tuto funkci:

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

Klient i služba musí souhlasit s odesíláním a příjmem komprimovaných zpráv, a proto musí být vlastnost compressionFormat nakonfigurována na binaryMessageEncoding element v klientovi i službě. ProtokolException je vyvolán, pokud služba nebo klient není nakonfigurován pro kompresi, ale druhá strana je. Povolení komprese by se mělo pečlivě zvážit. Komprese je většinou užitečná, pokud je šířka pásma sítě kritickým bodem. V případě, že je procesor kritickým bodem, komprese sníží propustnost. Vhodné testování musí být provedeno v simulovaném prostředí, aby bylo možné zjistit, jestli tato aplikace přináší výhody.

Viz také