TransferMode Výčet
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Určuje, jestli kanál používá režim streamování nebo vyrovnávací paměti pro přenos zpráv požadavků a odpovědí.
public enum class TransferMode
public enum TransferMode
type TransferMode =
Public Enum TransferMode
- Dědičnost
Pole
Buffered | 0 | Zprávy požadavků i odpovědí se ukládají do vyrovnávací paměti. |
Streamed | 1 | Zprávy požadavků i odpovědí se streamují. |
StreamedRequest | 2 | Zpráva požadavku se streamuje a zpráva odpovědi se zasadí do vyrovnávací paměti. |
StreamedResponse | 3 | Zpráva požadavku se zasadí do vyrovnávací paměti a zpráva odpovědi se streamuje. |
Příklady
Následující příklad nastaví tcpTransportBindingElement.TransferMode vlastnost prostřednictvím Streamed
kódu:
TcpTransportBindingElement transport = new TcpTransportBindingElement();
transport.TransferMode = TransferMode.Streamed;
BinaryMessageEncodingBindingElement encoder = new BinaryMessageEncodingBindingElement();
CustomBinding binding = new CustomBinding(encoder, transport);
Následující příklad nastaví vlastnost TcpTransportBindingElement.TransferMode na Streamed
prostřednictvím konfigurace:
<customBinding>
<binding name="streamingBinding">
<binaryMessageEncoding />
<tcpTransport transferMode="Streamed" />
</binding>
</customBinding>
Poznámky
Přenosy WCF (Windows Communication Foundation) podporují dva režimy přenosu zpráv v každém směru:
Přenosy ve vyrovnávací paměti uchovávají celou zprávu v vyrovnávací paměti, dokud přenos nebude dokončen.
Streamované přenosy pouze uloží do vyrovnávací paměti záhlaví zpráv a zpřístupňují tělo zprávy jako datový proud, ze kterého lze najednou číst menší části.
Nastavením režimu přenosu na povolíte Streamed
streamování komunikace v obou směrech. Nastavení režimu přenosu na StreamedRequest
nebo StreamedResponse
povolí streamování komunikace pouze v určeném směru.
Streamované přenosy můžou zlepšit škálovatelnost služby tím, že eliminují potřebu velkých vyrovnávacích pamětí. To, jestli změna režimu přenosu skutečně zlepší škálovatelnost v praxi, závisí na velikosti přenášených zpráv. Zlepšení škálovatelnosti by mělo být nejzřetelnější v případě, že velké zprávy používají streamované místo přenosů do vyrovnávací paměti.
Přenosy HTTP, TCP/IP a pojmenovaného kanálu ve výchozím nastavení používají přenosy zpráv ve vyrovnávací paměti. Můžete nastavit hodnoty TransferMode
BasicHttpBindingpro vazby , NetTcpBindinga NetNamedPipeBinding systémem poskytnuté pomocí vlastností režimu přenosu, které jsou na nich vystaveny. Režim lze nastavit u NetTcpBinding třídy, například pomocí NetTcpBinding.TransferMode vlastnosti . Můžete ho také nastavit v části konfigurace vazby.
Pro vazby, které nezpřístupňují vlastnost režimu přenosu, lze režim přenosu nastavit na element vazby přenosu a tento prvek lze poté přidat do vlastní vazby. Vytvořte například HttpTransportBindingElement a použijte TransferMode vlastnost k nastavení režimu přenosu při vytváření vlastní vazby. Režim přenosu lze také nastavit v části konfigurace pro vlastní vazbu.
Rozhodnutí použít přenosy ve vyrovnávací paměti nebo streamované přenosy je místním rozhodnutím koncového bodu pro přenosy HTTP. U přenosů HTTP se režim přenosu nerozšířit v rámci připojení ani na proxy servery nebo jiné zprostředkovatele. Nastavení režimu přenosu se neprojeví v popisu servisního kontraktu. Po vygenerování proxy serveru do služby můžete (je to povolené, ale není povinné) upravit konfigurační soubor pro služby určené k použití se streamovanými přenosy a nastavit režim přenosu. U přenosů tcp a pojmenovaných kanálů se režim přenosu šíří jako kontrolní výraz zásady.
Streamed
Použití režimu přenosu způsobí, že modul runtime WCF vynutí některá omezení.
Operace, ke kterým dochází v rámci streamovaného přenosu, můžou mít kontrakt s maximálně jedním vstupním a/nebo jedním výstupním parametrem ve vrstvě programovacího modelu. Tento parametr odpovídá celému textu zprávy a musí být Message, být podtypem Streamnebo implementovat IXmlSerializable rozhraní. Návratovou hodnotu pro operaci je ekvivalentem výstupního parametru.
Některé funkce WCF, jako je spolehlivé zasílání zpráv 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 z hlediska výkonu, které používání streamování přináší. Pokud chcete zabezpečit streamovaný přenos, používejte pouze zabezpečení na úrovni přenosu nebo zabezpečení ve smíšeném režimu, který kombinuje deklarace identity WS-Security se zabezpečením přenosu.
Hlavičky SOAP se vždy ukládají do vyrovnávací paměti, i když je režim přenosu nastavený na
Streamed
. Hlavičky zprávy nesmí překročit velikost kvóty přenosu MaxBufferSize, která je vystavena na různých vazbách a elementech vazby.
Změna režimu přenosu z Buffered
na Streamed
také změní tvar nativního kanálu přenosu TCP a pojmenovaného kanálu. 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. Důsledkem toho je, že se se streamováním přenosu nedají používat kontrakty služeb využívající relace.