Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Přenosy wcf (Windows Communication Foundation) podporují dva režimy přenosu zpráv:
Přenosy s vyrovnávací pamětí uchovávají celou zprávu v paměti až do dokončení přenosu. 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í protokoly HTTP, TCP/IP a pojmenované kanály 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 na Streamed povolíte obousměrnou streamovanou komunikaci. Nastavení režimu přenosu na StreamedRequest nebo StreamedResponse umožňuje streamovací komunikaci pouze v uvedeném směru.
Objekty BasicHttpBinding, NetTcpBinding a NetNamedPipeBinding vazby zpřístupňují vlastnost TransferMode. Pro jiné přenosy musíte vytvořit vlastní vazbu pro nastavení režimu přenosu.
Rozhodnutí o použití bufferovaných nebo streamovaných přenosů 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 rour se režim přenosu propaguje jako zásadní tvrzení.
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 chování koncového bodu DispatcherSynchronizationBehavior do hostitele služby a nastavte jeho vlastnost AsynchronousSendEnabled na true.
Tato verze WCF také přidala 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 modul runtime 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 pro přenos.
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í nativní strukturu kanálu transportu TCP a pojmenovaných kanálů. Pro přenosy do vyrovnávací paměti je IDuplexSessionChannelobrazec nativního kanálu . Nativní kanály pro streamované přenosy jsou IRequestChannel 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é konfigurace kanálu pro továrny kanálů a posluchače.