Sdílet prostřednictvím


Streamování přenosu zpráv

Přenosy wcf (Windows Communication Foundation) podporují dva režimy přenosu zpráv:

  • Přenosy ve vyrovnávací paměti uchovávají celou zprávu do vyrovnávací paměti, dokud nebude přenos dokončen. Zpráva ve vyrovnávací paměti musí být zcela doručena, aby ji příjemce mohl přečíst.

  • Streamované přenosy zpřístupňují zprávu jako stream. Příjemce začne zprávu zpracovávat dříve, než je zcela doručena.

  • Streamované přenosy můžou zlepšit škálovatelnost služby odstraněním požadavků na velké vyrovnávací paměti. Zda změna režimu přenosu zlepšuje škálovatelnost, závisí na velikosti přenášených zpráv. Velké velikosti zpráv upřednostňují použití streamovaných přenosů.

Ve výchozím nastavení protokol HTTP, TCP/IP a pojmenované přenosy kanálu používají přenosy ve vyrovnávací paměti. Tento dokument popisuje, jak tyto přenosy přepnout z vyrovnávací paměti na streamovaný přenosový režim a důsledky tohoto postupu.

Povolení streamovaných přenosů

Výběr mezi režimy přenosu uloženými do vyrovnávací paměti a streamovaného přenosu se provádí u vazby prvku přenosu. Element vazby má TransferMode vlastnost, kterou lze nastavit na Buffered, Streamed, StreamedRequestnebo StreamedResponse. Nastavením režimu přenosu povolíte Streamed komunikaci streamování v obou směrech. Nastavení režimu přenosu do StreamedRequest nebo StreamedResponse povolení komunikace streamování pouze v uvedeném směru.

Objekty BasicHttpBinding, NetTcpBindinga NetNamedPipeBinding vazby zpřístupňují TransferMode vlastnost. Pro jiné přenosy musíte vytvořit vlastní vazbu pro nastavení režimu přenosu.

Rozhodnutí o použití přenosů ve vyrovnávací paměti nebo streamovaných přenosech je místní rozhodnutí koncového bodu. U přenosů HTTP se režim přenosu nerozšíruje přes připojení ani na servery a další zprostředkovatele. Nastavení režimu přenosu se neprojeví v popisu rozhraní služby. Po vygenerování třídy klienta pro službu je nutné upravit konfigurační soubor pro služby určené k použití se streamovanými přenosy pro nastavení režimu. U přenosů TCP a pojmenovaných kanálu se režim přenosu rozšíří jako kontrolní výraz zásad.

Ukázky kódu najdete v tématu Postupy: Povolení streamování.

Povolení asynchronního streamování

Pokud chcete povolit asynchronní streamování, přidejte DispatcherSynchronizationBehavior do hostitele služby chování koncového bodu a nastavte jeho AsynchronousSendEnabled vlastnost na true.

Tato verze WCF také přidává schopnost skutečného asynchronního streamování na straně odesílání. To zlepšuje škálovatelnost služby ve scénářích, kdy streamuje zprávy více klientům, z nichž některé jsou pomalé při čtení; pravděpodobně kvůli zahlcení sítě nebo vůbec nečtou. V těchto scénářích už WCF neblokuje jednotlivá vlákna ve službě pro jednotlivé klienty. Tím se zajistí, že služba dokáže zpracovat mnohem více klientů a tím zlepšit škálovatelnost služby.

Omezení streamovaných přenosů

Použití streamovaného režimu přenosu způsobí, že doba běhu vynutí další omezení.

Operace, ke kterým dochází napříč streamovaným přenosem, můžou mít kontrakt s maximálně jedním vstupním nebo výstupním parametrem. Tento parametr odpovídá celému textu zprávy a musí být odvozeným typem MessageStreamnebo implementacíIXmlSerializable. Návratová hodnota operace odpovídá výstupnímu parametru.

Některé funkce WCF, jako je spolehlivé zasílání zpráv, transakce a zabezpečení na úrovni zpráv SOAP, spoléhají na ukládání zpráv do vyrovnávací paměti pro přenosy. Používání těchto funkcí může snížit nebo eliminovat výhody výkonu získané pomocí streamování. Chcete-li zabezpečit streamovaný přenos, použijte pouze zabezpečení na úrovni přenosu nebo použijte zabezpečení na úrovni přenosu a zabezpečení zpráv pouze pro ověřování.

Hlavičky SOAP se vždy ukládají do vyrovnávací paměti, i když je režim přenosu nastavený na streamovaný. Hlavičky zprávy nesmí překročit velikost MaxBufferSize přenosové kvóty. Další informace o tomto nastavení naleznete v tématu Kvóty přenosu.

Rozdíly mezi přenosy ve vyrovnávací paměti a streamovanými přenosy

Změna režimu přenosu z vyrovnávací paměti na streamované také změní tvar nativního kanálu přenosu TCP a pojmenovaných kanálů. Pro přenosy do vyrovnávací paměti je IDuplexSessionChannelobrazec nativního kanálu . Pro streamované přenosy jsou IRequestChannel nativní kanály a IReplyChannel. Změna režimu přenosu v existující aplikaci, která tyto přenosy používá přímo (tj. ne prostřednictvím kontraktu služby), vyžaduje změnu očekávaného tvaru kanálu pro továrny kanálů a naslouchací procesy.

Viz také