Přehled modelu kanálu

Zásobník kanálů WCF (Windows Communication Foundation) je vrstvený komunikační zásobník s jedním nebo více kanály, které zpracovávají zprávy. V dolní části zásobníku je přenosový kanál, který je zodpovědný za přizpůsobení kanálového zásobníku podle podkladového přenosu (například TCP, HTTP, SMTP a další typy přenosu). Kanály poskytují programovací model nízké úrovně pro odesílání a příjem zpráv. Tento programovací model spoléhá na několik rozhraní a dalších typů souhrnně označovaných jako model kanálu WCF. Toto téma popisuje tvary kanálů, vytvoření základního naslouchacího procesoru kanálu (ve službě) a továrnu kanálů (na klientovi).

Zásobník kanálů

Koncové body WCF komunikují se světem pomocí komunikačního zásobníku označovaného jako zásobník kanálu. Následující diagram porovnává zásobník kanálů s jinými komunikačními zásobníky, například TCP/IP.

Model kanálu wcfc_ChannelStackHighLevelc

Zaprvé podobnosti: V obou případech každá vrstva zásobníku poskytuje nějakou abstrakci světa pod danou vrstvou a odhaluje tuto abstrakci pouze vrstvě přímo nad ní. Každá vrstva používá abstrakci pouze vrstvy přímo pod ní. Také v obou případech, když dvě zásobníky komunikují, každá vrstva komunikuje s odpovídající vrstvou v druhém zásobníku, například vrstva PROTOKOLU IP komunikuje s vrstvou IP a vrstvou TCP s vrstvou TCP atd.

Rozdíly: I když byl zásobník TCP navržen tak, aby poskytoval abstrakci fyzické sítě, je zásobník kanálu navržen tak, aby poskytoval abstrakci nejen toho, jak se zpráva doručí, tedy přenos, ale také další funkce, jako je například to, co je ve zprávě nebo jaký protokol se používá pro komunikaci, včetně dopravy, ale mnohem více než toho. Například spolehlivý prvek vazby relace je součástí zásobníku kanálu, ale není umístěn pod přenosem ani není samotným přenosem. Tato abstrakce se dosahuje tím, že vyžaduje, aby spodní kanál v zásobníku adaptoval základní přenosový protokol architektuře kanálového zásobníku, a spoléhá na kanály dále v zásobníku, aby poskytovaly komunikační funkce, jako jsou záruky spolehlivosti a zabezpečení.

Zprávy procházejí vrstvou komunikace jako objekty Message. Jak je znázorněno na obrázku výše, dolní kanál se nazývá přenosový kanál. Je to kanál, který zodpovídá za odesílání a přijímání zpráv jiným stranám a od jiných stran. To zahrnuje odpovědnost za transformaci objektu Message na formát použitý ke komunikaci s jinými stranami a z tohoto formátu. Nad přenosovým kanálem může být libovolný počet kanálů protokolu, které zodpovídají za poskytování komunikační funkce, jako jsou spolehlivé záruky doručování. Protokolové kanály pracují se zprávami, které procházejí v podobě objektu Message . Obvykle buď transformují zprávu, například přidáním hlaviček nebo zašifrováním textu, nebo odesílají a přijímají vlastní řídicí zprávy protokolu, například potvrzení o přijetí.

Obrazce kanálu

Každý kanál implementuje jedno nebo více rozhraní, známých jako rozhraní obrazce kanálu nebo tvary kanálu. Struktura těchto kanálů poskytuje metody zaměřené na komunikaci, jako je odesílání a přijímání nebo požadavky a odpovědi, které kanál implementuje a uživatel kanálu volá. Na základně tvarů kanálu je IChannel rozhraní, což je rozhraní, které poskytuje GetProperty<T> metodu určenou jako vrstvený mechanismus pro přístup k libovolným funkcím poskytovaným kanály ve vrstvě. Těchto pět tvarů kanálu, které se rozšiřují IChannel, jsou:

Dále každý z těchto tvarů má ekvivalent, který rozšiřuje podporu relací na System.ServiceModel.Channels.ISessionChannel<TSession>. Toto jsou:

Obrazce kanálů se vzorují po některých základních vzorech výměny zpráv podporovaných existujícími přenosovými protokoly. Jednosměrné zasílání zpráv například odpovídá páru IInputChannel/IOutputChannel, odpověď na žádost odpovídá párům IRequestChannel/IReplyChannel a obousměrné duplexní komunikaci odpovídá IDuplexChannel (který rozšiřuje oba IInputChannel i IOutputChannel).

Programování pomocí zásobníku kanálů

Zásobníky kanálů se obvykle vytvářejí pomocí vzoru továrny, kde propojení vytvoří zásobník kanálů. Na straně odesílatele se použije vazba k vytvoření ChannelFactory, která sestaví zásobník kanálů a vrátí odkaz na horní kanál v zásobníku. Aplikace pak může tento kanál použít k odesílání zpráv. Další informace naleznete v tématu Klientské Channel-Level Programování.

Na straně příjmu se použije IChannelListener pro vytvoření vazby, která naslouchá příchozím zprávám. IChannelListener poskytuje zprávy naslouchací aplikaci tím, že vytvoří zásobníky kanálů a předá referenci na nejvyšší kanál aplikaci. Aplikace pak tento kanál použije k příjmu příchozích zpráv. Další informace naleznete v tématu Service Channel-Level Programování.

Model objektu kanálu

Model objektu kanálu je základní sada rozhraní potřebných k implementaci kanálů, posluchačů kanálů a vytváření kanálů. K dispozici jsou také některé základní třídy, které vám pomůžou s vlastními implementacemi.

Posluchači kanálů jsou zodpovědní za naslouchání příchozím zprávám, pak je doručují do vrstvy nad nimi prostřednictvím kanálů vytvořených posluchačem kanálu.

Objekty pro vytváření kanálů zodpovídají za vytváření kanálů, které se používají k odesílání zpráv, a za zavírání všech kanálů vytvořených při zavření objektu pro vytváření kanálů.

ICommunicationObject je základní rozhraní, které definuje základní stavový počítač, který implementují všechny komunikační objekty. CommunicationObject poskytuje implementaci tohoto základního rozhraní, ze kterého mohou být odvozeny jiné třídy kanálů namísto opětovné implementace rozhraní. To však není povinné: vlastní kanál může implementovat ICommunicationObject přímo a nedědí z CommunicationObject. Žádná z tříd na obrázku 3 se nepovažuje za součást modelu kanálu; jedná se o pomocné nástroje dostupné pro tvůrce vlastních kanálů, kteří chtějí vytvářet kanály.

Model kanálu

Následující témata popisují objektový model kanálu a také různé vývojové oblasti, které pomáhají vytvářet vlastní kanály.

Téma Popis
Služba: Posluchače kanálů a kanály Popisuje posluchače kanálu, kteří naslouchají příchozím kanálům v servisní aplikaci.
Klient: Objekty pro vytváření kanálů a kanály Popisuje objekty pro vytváření kanálů, které vytvářejí kanály pro připojení k aplikaci služby.
Porozumění změnám stavu Popisuje, jak rozhraní System.ServiceModel.ICommunicationObject modeluje změny stavů v kanálech.
Volba vzoru výměny zpráv Popisuje šest základních vzorů výměny zpráv, které kanály můžou podporovat.
Zpracování výjimek a chyb Popisuje způsob zpracování chyb a výjimek ve vlastních kanálech.
Podpora konfigurace a metadat Popisuje, jak podporovat použití vlastních kanálů z aplikačního modelu a jak exportovat a importovat metadata pomocí vazeb a vazeb prvků.