Sdílet prostřednictvím


Rozšíření klientů

V volající aplikaci je vrstva modelu služby zodpovědná za překlad volání metod v kódu aplikace do odchozích zpráv, jejich nasdílení do podkladových kanálů, překlad výsledků zpět do návratových hodnot a parametrů v kódu aplikace a vrácení výsledků zpět volajícímu. Rozšíření modelu služeb upravují nebo implementují chování při provádění nebo komunikaci a funkce zahrnující funkce klienta nebo dispečera, vlastní chování, zachytávání zpráv a parametrů a další funkce rozšiřitelnosti.

Toto téma popisuje, jak pomocí ClientRuntime a ClientOperation tříd v klientské aplikaci WCF (Windows Communication Foundation) upravit výchozí chování spuštění klienta WCF nebo zachytit nebo upravit zprávy, parametry nebo vrátit hodnoty před odesláním nebo načtením z vrstvy kanálu. Další informace o rozšíření runtime služby naleznete v tématu Rozšíření dispečerů. Další informace o chování, která upravují a vkládají objekty přizpůsobení do modulu runtime klienta, naleznete v tématu Konfigurace a rozšíření modulu runtime pomocí chování.

Klienti

Na klientovi převede objekt klienta WCF nebo klientský kanál volání metod na odchozí zprávy a z příchozích zpráv vytvoří výsledky operací, které se vrátí do volající aplikace. (Další informace o typech klientů naleznete v tématu Architektura klienta WCF.)

Typy klientů WCF mají typy modulu runtime, které zpracovávají funkčnost na úrovni koncových bodů a operací. Když aplikace volá operaci, ClientOperation přeloží odchozí objekty do zprávy, zpracuje interceptory, potvrdí, že odchozí volání odpovídá cílovému kontraktu, a odešle odchozí zprávu ClientRuntime, která je zodpovědná za vytváření a správu odchozích kanálů (a příchozích kanálů v případě duplexních služeb), zpracování extra odchozích zpráv (například úpravy hlaviček), zpracování interceptorů zpráv v obou směrech a směrování příchozího duplexního volání do příslušného objektu na straně klienta DispatchRuntime. Jak ClientOperation tak ClientRuntime poskytují podobné služby, když jsou klientovi vráceny zprávy (včetně chyb).

Tyto dvě třídy modulu runtime jsou hlavním rozšířením pro přizpůsobení zpracování klientských objektů a kanálů WCF. Třída ClientRuntime umožňuje uživatelům zachytit a rozšířit funkce klienta napříč všemi zprávami v kontraktu. Třída ClientOperation umožňuje uživatelům zasáhnout a rozšířit provedení klienta pro všechny zprávy v dané operaci.

Úpravy vlastností nebo vkládání vlastních nastavení se provádějí pomocí smlouvy, koncového bodu a operačního chování. Další informace o použití těchto typů chování k provádění přizpůsobení modulu runtime klienta naleznete v tématu Konfigurace a rozšíření modulu runtime s chováním.

Scénáře

Existuje několik důvodů, proč rozšířit klientský systém, včetně:

Použití třídy ClientRuntime

Třída ClientRuntime je rozšiřitelný bod, do kterého můžete přidat rozšiřující objekty, které zachycují zprávy a rozšiřují chování klienta. Objekty průsečíku mohou zpracovávat všechny zprávy v určitém kontraktu, zpracovávat pouze zprávy pro konkrétní operace, provádět inicializaci vlastního kanálu a implementovat další chování vlastní klientské aplikace.

  • Vlastnost CallbackDispatchRuntime vrátí objekt runtime modulu dispatch pro klienty zpětného volání, které iniciovala služba.

  • Vlastnost OperationSelector přijímá vlastní objekt selektoru operace.

  • Tato ChannelInitializers vlastnost umožňuje přidání inicializátoru kanálu, který může zkontrolovat nebo upravit klientský kanál.

  • Vlastnost Operations získá kolekci objektů ClientOperation, do kterých můžete přidat vlastní zachytávače zpráv, které poskytují funkcionalitu specifickou pro zprávy této operace.

  • Tato ManualAddressing vlastnost umožňuje aplikaci vypnout některá automaticky přidávaná záhlaví pro přímé řízení adresování.

  • Vlastnost Via nastaví hodnotu cíle zprávy na úrovni přenosu pro podporu zprostředkovatelů a dalších scénářů.

  • Vlastnost MessageInspectors získá kolekci IClientMessageInspector objektů, do kterých můžete přidat vlastní průsečíky zpráv pro všechny zprávy cestující přes klienta WCF.

Kromě toho existuje řada dalších vlastností, které načítají informace o kontraktu:

Pokud je klient WCF duplexní, následující vlastnosti také načtou informace o klientovi WCF pro zpětné volání.

Chcete-li rozšířit provádění klienta WCF napříč celým klientem WCF, zkontrolujte vlastnosti, které jsou k dispozici ve ClientRuntime třídě, a zjistěte, zda upravujete vlastnost nebo implementujete rozhraní a jeho přidání do vlastnosti vytvoří funkce, které hledáte. Jakmile zvolíte konkrétní rozšíření pro sestavení, vložte rozšíření do příslušné ClientRuntime vlastnosti implementováním chování klienta, které poskytuje přístup ke ClientRuntime třídě po vyvolání.

Vlastní rozšiřující objekty můžete do kolekce vložit pomocí chování operace (objekt, který implementuje IOperationBehavior), chování kontraktu (objekt, který implementuje IContractBehavior) nebo chování koncového bodu (objekt, který implementuje IEndpointBehavior). Objekt chování instalace se přidá do příslušné kolekce chování buď programově, deklarativní (implementací vlastního atributu) nebo implementací vlastního BehaviorExtensionElement objektu, aby bylo možné chování vložit pomocí konfiguračního souboru aplikace. Podrobnosti viz v tématu Konfigurace a rozšíření modulu runtime pomocí chování.

Pro příklady, které ukazují, jak zachytit nebo upravit zprávy v klientovi WCF, viz Postupy: Kontrola nebo úprava zpráv v klientovi.

Použití třídy ClientOperation

Třída ClientOperation je místem pro úpravy klientského modulu runtime a vstupním bodem pro vlastní rozšíření, která se vztahují pouze na jednu operaci služby. (Chcete-li změnit chování modulu runtime klienta pro všechny zprávy v kontraktu, použijte třídu ClientRuntime.)

Operations Pomocí vlastnosti vyhledejte ClientOperation objekt, který představuje konkrétní operaci služby. Následující vlastnosti umožňují vložit vlastní objekty do klientského systému WCF:

Následující vlastnosti umožňují upravit systém v interakci s formátovacím modulem a vlastními inspektory parametrů:

  • SerializeRequest Vlastnost slouží k řízení serializace odchozí zprávy.

  • DeserializeReply Vlastnost slouží k řízení deserializace příchozí zprávy.

  • Vlastnost Action použijte k ovládání WS-Addressing akce zprávy požadavku.

  • Použijte BeginMethod a určete EndMethod, které metody klienta WCF jsou přidruženy k asynchronní operaci.

  • FaultContractInfos Pomocí vlastnosti získáte kolekci obsahující typy, které se mohou objevit v chybách SOAP jako typ podrobností.

  • Pomocí vlastností IsInitiating a IsTerminating můžete ovládat, zda je relace při volání operace inicializována nebo ukončena.

  • IsOneWay Pomocí vlastnosti můžete řídit, zda je operace jednosměrná operace.

  • Použijte vlastnost Parent k získání objektu, který obsahuje ClientRuntime.

  • Name Pomocí vlastnosti získejte název operace.

  • SyncMethod Pomocí vlastnosti můžete určit, která metoda je mapována na operaci.

Pokud chcete rozšířit spouštění klienta WCF pouze přes jednu operaci služby, zkontrolujte vlastnosti, které jsou k dispozici ve ClientOperation třídě, a zjistěte, jestli upravujete vlastnost nebo implementujete rozhraní a jeho přidání do vlastnosti vytvoří funkce, které hledáte. Jakmile zvolíte konkrétní rozšíření pro sestavení, vložte rozšíření do příslušné ClientOperation vlastnosti implementováním chování klienta, které poskytuje přístup ke ClientOperation třídě po vyvolání. Uvnitř takového chování můžete vlastnost upravit ClientRuntime tak, aby vyhovovala vašim požadavkům.

Obvykle stačí implementovat chování operace (objekt, který implementuje IOperationBehavior rozhraní), ale můžete také použít chování koncových bodů a chování kontraktů k dosažení stejné věci vyhledáním OperationDescription konkrétní operace a připojením chování tam. Podrobnosti viz v tématu Konfigurace a rozšíření modulu runtime pomocí chování.

Pokud chcete použít vlastní chování z konfigurace, nainstalujte toto chování pomocí zprostředkovatele pro konfiguraci vlastního oddílu chování. Chování můžete nainstalovat také vytvořením vlastního atributu.

Příklady, které demonstrují zachycení u klienta WCF, najdete v tématu Postupy: Kontrola nebo úprava parametrů.

Viz také