Základní koncepty služby Windows Communication Foundation
Tento dokument poskytuje základní pohled na architekturu WCF (Windows Communication Foundation). Má za cíl vysvětlit klíčové koncepty a jejich spojení. Kurz vytvoření nejjednodušší verze služby WCF a klienta najdete v kurzu Začínáme. Informace o programování WCF naleznete v tématu Základní programování WCF.
Základy WCF
WCF je modul runtime a sada rozhraní API pro vytváření systémů, které odesílají zprávy mezi službami a klienty. Stejná infrastruktura a rozhraní API se používají k vytváření aplikací, které komunikují s jinými aplikacemi ve stejném počítačovém systému nebo v systému, který se nachází v jiné společnosti a je přístupný přes internet.
Zasílání zpráv a koncové body
WCF je založen na pojmu komunikace založené na zprávách a cokoli, co lze modelovat jako zprávu (například požadavek HTTP nebo zpráva služby Řízení front zpráv (označovaná také jako MSMQ) může být reprezentována jednotným způsobem v programovacím modelu. To umožňuje jednotné rozhraní API v různých transportních mechanismech.
Model rozlišuje mezi klienty, což jsou aplikace, které inicializuje komunikaci, a služby, což jsou aplikace, které čekají na komunikaci klientů a reagují na danou komunikaci. Jedna aplikace může fungovat jako klient i služba. Příklady najdete v tématu Duplex Services a Peer-to-Peer Networking.
Zprávy se odesílají mezi koncovými body. Koncové body jsou místa, kde se zprávy odesílají nebo přijímají (nebo obojí) a definují všechny informace potřebné pro výměnu zpráv. Služba zveřejňuje jeden nebo více koncových bodů aplikace (stejně jako nula nebo více koncových bodů infrastruktury) a klient vygeneruje koncový bod, který je kompatibilní s jedním z koncových bodů služby.
Koncový bod popisuje standardním způsobem, kam se mají zprávy odesílat, jak se mají odesílat a jak by měly zprávy vypadat. Služba může tyto informace zveřejnit jako metadata, která můžou klienti zpracovávat a generovat příslušné klienty WCF a komunikační zásobníky.
Komunikační protokoly
Jedním z požadovaných prvků komunikačního zásobníku je přenosový protokol. Zprávy lze odesílat přes intranety a internet pomocí běžných přenosů, jako je HTTP a TCP. Další přenosy jsou zahrnuty, které podporují komunikaci s aplikacemi a uzly řízení front zpráv v síti Peer Networking. Pomocí integrovaných rozšiřujících bodů WCF je možné přidat další přenosové mechanismy.
Dalším povinným prvkem v komunikačním zásobníku je kódování, které určuje, jak je daná zpráva formátována. WCF poskytuje následující kódování:
Kódování textu, interoperabilní kódování.
Kódování mechanismu optimalizace přenosu zpráv (MTOM), což je interoperabilní způsob efektivního odesílání nestrukturovaných binárních dat do a ze služby.
Binární kódování pro efektivní přenos.
Pomocí integrovaných rozšiřujících bodů WCF je možné přidat další mechanismy kódování (například kódování komprese).
Vzory zpráv
WCF podporuje několik vzorů zasílání zpráv, včetně odpovědi na požadavek, jednosměrné a duplexní komunikace. Různé přenosy podporují různé vzory zasílání zpráv, a proto ovlivňují typy interakcí, které podporují. Rozhraní API a modul runtime WCF také pomáhají bezpečně a spolehlivě odesílat zprávy.
Termíny WCF
Mezi další koncepty a termíny používané v dokumentaci WCF patří:
Message
Samostatná jednotka dat, která se může skládat z několika částí, včetně textu a záhlaví.
Služba
Konstruktor, který zveřejňuje jeden nebo více koncových bodů, přičemž každý koncový bod zveřejňuje jednu nebo více operací služby.
Endpoint
Konstruktor, ve kterém se zprávy odesílají nebo přijímají (nebo obojí). Skládá se z umístění (adresy), které definuje, kde lze odesílat zprávy, specifikaci komunikačního mechanismu (vazby), který popisuje způsob odesílání zpráv, a definici sady zpráv, které lze odeslat nebo přijímat (nebo obojí) v daném umístění (kontrakt služby), které popisují, jaká zpráva se dá odeslat.
Služba WCF je zpřístupněna světu jako kolekce koncových bodů.
Koncový bod aplikace
Koncový bod vystavený aplikací a odpovídá kontraktu služby implementovanému aplikací.
Koncový bod infrastruktury
Koncový bod, který je vystavený infrastrukturou, aby usnadnil funkčnost potřebnou nebo poskytovanou službou, která nesouvisí s kontraktem služby. Například služba může mít koncový bod infrastruktury, který poskytuje informace o metadatech.
Adresa
Určuje umístění, kam se zprávy přijímají. Je určen jako identifikátor URI (Uniform Resource Identifier). Část schématu identifikátoru URI označuje transportní mechanismus, který se má použít k dosažení adresy, jako je HTTP a TCP. Hierarchická část identifikátoru URI obsahuje jedinečné umístění, jehož formát je závislý na přenosovém mechanismu.
Adresa koncového bodu umožňuje vytvořit jedinečné adresy koncových bodů pro každý koncový bod ve službě nebo za určitých podmínek sdílet adresu napříč koncovými body. Následující příklad ukazuje adresu používající protokol HTTPS s jiným než výchozím portem:
HTTPS://cohowinery:8005/ServiceModelSamples/CalculatorService
Binding
Definuje, jak koncový bod komunikuje se světem. Je tvořena sadou komponent označovaných jako vazbové prvky, které "stack" jeden nad druhým vytvoří komunikační infrastrukturu. Alespoň vazba definuje přenos (například HTTP nebo TCP) a použité kódování (například text nebo binární soubor). Vazba může obsahovat prvky vazby, které určují podrobnosti, jako jsou mechanismy zabezpečení používané k zabezpečení zpráv nebo vzor zpráv používaný koncovým bodem. Další informace naleznete v tématu Konfigurace služeb.
Binding – element
Představuje konkrétní část vazby, jako je přenos, kódování, implementace protokolu na úrovni infrastruktury (například WS-ReliableMessaging) nebo jakékoli jiné součásti komunikačního zásobníku.
Chování
Komponenta, která řídí různé aspekty služby za běhu, koncového bodu, konkrétní operace nebo klienta. Chování se seskupuje podle rozsahu: běžné chování ovlivňuje všechny koncové body globálně, chování služby ovlivňuje pouze aspekty související se službami, chování koncových bodů ovlivňuje pouze vlastnosti související s koncovými body a chování na úrovni operací ovlivňují konkrétní operace. Například jedno chování služby je omezování, které určuje, jak služba reaguje, když překročení zpráv vyhrožuje zahlcení jeho schopností zpracování. Chování koncového bodu na druhé straně řídí pouze aspekty, které jsou relevantní pro koncové body, jako je způsob a kde najít přihlašovací údaje zabezpečení.
Systémové vazby
WCF obsahuje řadu systémových vazeb. Jedná se o kolekce vazeb prvků, které jsou optimalizované pro konkrétní scénáře. Například je navržena pro interoperabilitu WSHttpBinding se službami, které implementují různé specifikace WS-*. Tyto předdefinované vazby šetří čas zobrazením pouze těch možností, které lze správně použít pro konkrétní scénář. Pokud předdefinovaná vazba nesplňuje vaše požadavky, můžete vytvořit vlastní vazbu.
Konfigurace a kódování
Řízení aplikace je možné provádět prostřednictvím kódování, konfigurace nebo kombinace obou aplikací. Konfigurace má výhodu, že umožňuje někomu jinému než vývojáři (například správci sítě) nastavit parametry klienta a služby po napsání kódu a bez nutnosti překompilovat. Konfigurace umožňuje nejen nastavit hodnoty, jako jsou adresy koncových bodů, ale také umožňuje další kontrolu tím, že umožňuje přidávat koncové body, vazby a chování. Kódování umožňuje vývojáři zachovat přísnou kontrolu nad všemi komponentami služby nebo klienta a všechna nastavení provedená prostřednictvím konfigurace je možné zkontrolovat a v případě potřeby přepsat kódem.
Operace služby
Procedura definovaná v kódu služby, která implementuje funkce pro operaci. Tato operace je klientům zpřístupněna jako metody v klientovi WCF. Metoda může vrátit hodnotu a může vzít volitelný počet argumentů nebo přijmout žádné argumenty a vrátit žádnou odpověď. Například operaci, která funguje jako jednoduchý "Hello", se dá použít jako oznámení o přítomnosti klienta a k zahájení řady operací.
Smlouva o poskytování služeb
Spojí několik souvisejících operací do jedné funkční jednotky. Kontrakt může definovat nastavení na úrovni služby, například obor názvů služby, odpovídající kontrakt zpětného volání a další taková nastavení. Ve většině případů je kontrakt definován vytvořením rozhraní v programovacím jazyce podle vašeho výběru a použitím atributu ServiceContractAttribute na rozhraní. Skutečné výsledky kódu služby implementací rozhraní.
Kontrakt operace
Kontrakt operace definuje parametry a návratový typ operace. Při vytváření rozhraní, které definuje kontrakt služby, podepíšete kontrakt operace použitím atributu OperationContractAttribute na každou definici metody, která je součástí kontraktu. Operace se dají modelovat tak, že přebírají jednu zprávu a vrací jednu zprávu, nebo jako sadu typů a vrací typ. V druhém případě systém určí formát zpráv, které je potřeba pro danou operaci vyměnit.
Smlouva se zprávou
Popisuje formát zprávy. Například deklaruje, zda mají prvky zprávy jít do záhlaví a textu, jaká úroveň zabezpečení by se měla použít na jaké prvky zprávy atd.
Kontrakt chyb
K operaci služby je možné přidružit k označení chyb, které se dají vrátit volajícímu. K operaci může být přidružena nula nebo více chyb. Tyto chyby jsou chyby SOAP, které jsou modelovány jako výjimky v programovacím modelu.
Kontrakt dat
Popisy v metadatech datových typů, které služba používá. To umožňuje ostatním spolupracovat se službou. Datové typy lze použít v libovolné části zprávy, například jako parametry nebo návratové typy. Pokud služba používá pouze jednoduché typy, není nutné explicitně používat kontrakty dat.
Hosting
Služba musí být hostovaná v určitém procesu. Hostitel je aplikace, která řídí životnost služby. Služby můžou být hostované nebo spravované existujícím hostitelským procesem.
Služba v místním prostředí
Služba spuštěná v rámci procesní aplikace, kterou vytvořil vývojář. Vývojář řídí svou životnost, nastaví vlastnosti služby, otevře službu (která ji nastaví do režimu naslouchání) a službu zavře.
Proces hostování
Aplikace, která je navržená pro hostování služeb. Patří mezi ně Internetová informační služba (IIS), Aktivační služby systému Windows (WAS) a Služby systému Windows. V těchto hostovaných scénářích řídí hostitel životnost služby. Pomocí služby IIS můžete například nastavit virtuální adresář, který obsahuje sestavení služby a konfigurační soubor. Při přijetí zprávy služba IIS spustí službu a řídí její životnost.
Vytváření instancí
Služba má model vytváření instancí. Existují tři modely vytváření instancí: "single", ve kterém jeden objekt CLR obsluhuje všechny klienty; na volání", ve kterém je vytvořen nový objekt CLR pro zpracování každého volání klienta; a "na relaci", ve které se vytvoří sada objektů CLR, jedna pro každou samostatnou relaci. Volba modelu vytváření instancí závisí na požadavcích aplikace a očekávaném způsobu použití služby.
Klientská aplikace
Program, který vyměňuje zprávy s jedním nebo více koncovými body. Klientská aplikace začíná vytvořením instance klienta WCF a volání metod klienta WCF. Je důležité si uvědomit, že jedna aplikace může být klientem i službou.
Kanál
Konkrétní implementace vazbového prvku. Vazba představuje konfiguraci a kanál je implementace přidružená k této konfiguraci. Proto existuje kanál přidružený ke každému prvku vazby. Kanály jsou na sebe navzájem, aby vytvořily konkrétní implementaci vazby: zásobník kanálu.
Klient WCF
Konstruktor klientské aplikace, který zpřístupňuje operace služby jako metody (v programovacím jazyce rozhraní .NET Framework podle vašeho výběru, například Visual Basic nebo Visual C#). Každá aplikace může hostovat klienta WCF, včetně aplikace, která hostuje službu. Proto je možné vytvořit službu, která zahrnuje klienty WCF jiných služeb.
Klienta WCF je možné automaticky vygenerovat pomocí nástroje ServiceModel Metadata Utility (Svcutil.exe) a nasměrovat ho na spuštěnou službu, která publikuje metadata.
Metadata
Ve službě popisuje charakteristiky služby, které externí entita potřebuje porozumět komunikaci se službou. Metadata mohou využívat nástroj ServiceModel Metadata Utility Tool (Svcutil.exe) ke generování klienta WCF a doprovodné konfigurace, kterou může klientská aplikace použít k interakci se službou.
Metadata vystavená službou zahrnují dokumenty schématu XML, které definují kontrakt dat služby, a dokumenty WSDL, které popisují metody služby.
Pokud je tato možnost povolená, metadata pro službu se automaticky vygenerují službou WCF kontrolou služby a jejích koncových bodů. Pokud chcete publikovat metadata ze služby, musíte explicitně povolit chování metadat.
Zabezpečení
V WCF zahrnuje důvěrnost (šifrování zpráv, aby se zabránilo odposlouchávání), integrita (prostředky pro detekci manipulace se zprávou), ověřování (prostředky pro ověřování serverů a klientů) a autorizace (řízení přístupu k prostředkům). Tyto funkce jsou poskytovány buď pomocí stávajících mechanismů zabezpečení, jako je tls přes PROTOKOL HTTP (označovaný také jako HTTPS), nebo implementací jedné nebo více různých specifikací zabezpečení WS-*.
Režim zabezpečení přenosu
Určuje, že mechanismy přenosové vrstvy (například HTTPS) poskytují důvěrnost, integritu a ověřování. Při použití přenosu, jako je HTTPS, má tento režim výhodu efektivního výkonu a dobře pochopit kvůli své prevalenci na internetu. Nevýhodou je, že tento druh zabezpečení se používá samostatně u každého segmentu směrování v komunikační cestě, takže komunikace je náchylná k útoku "muž uprostřed".
Režim zabezpečení zpráv
Určuje, že zabezpečení je poskytováno implementací jedné nebo více specifikací zabezpečení, například specifikace s názvem Zabezpečení webových služeb: Zabezpečení zpráv SOAP. Každá zpráva obsahuje nezbytné mechanismy pro zajištění zabezpečení během přenosu a umožnění příjemcům detekovat manipulaci a dešifrovat zprávy. V tomto smyslu je zabezpečení zapouzdřeno do každé zprávy a poskytuje kompletní zabezpečení napříč několika segmenty směrování. Protože se informace o zabezpečení stanou součástí zprávy, je také možné do zprávy zahrnout více druhů přihlašovacích údajů (označují se jako deklarace identity). Tento přístup má také výhodu, že umožňuje bezpečné cestování zpráv po jakémkoli přenosu, včetně více přenosů mezi jeho původem a cílem. Nevýhodou tohoto přístupu je složitost používaných kryptografických mechanismů, což vede k dopadům na výkon.
Přenos s režimem zabezpečení přihlašovacích údajů zpráv
Určuje použití přenosové vrstvy k zajištění důvěrnosti, ověřování a integrity zpráv, zatímco každá zpráva může obsahovat více přihlašovacích údajů (deklarací identity) vyžadovaných příjemci zprávy.
WS-*
Zkratka pro rostoucí sadu specifikací webové služby (WS), jako je WS-Security, WS-ReliableMessaging atd., které jsou implementovány ve WCF.