Dela via


Utöka klienter

I ett anropande program ansvarar tjänstmodelllagret för att översätta metodanrop i programkod till utgående meddelanden, push-överföra dem till de underliggande kanalerna, översätta resultat tillbaka till returvärden och utparametrar i programkod och returnera resultaten tillbaka till anroparen. Tjänstmodelltillägg ändrar eller implementerar körnings- eller kommunikationsbeteende och funktioner som involverar klient- eller avsändarfunktioner, anpassade beteenden, avlyssning av meddelanden och parametrar samt andra utökningsfunktioner.

Det här avsnittet beskriver hur du använder ClientRuntime klasserna och ClientOperation i ett WCF-klientprogram (Windows Communication Foundation) för att ändra standardkörningsbeteendet för en WCF-klient eller för att fånga upp eller ändra meddelanden, parametrar eller returnera värden före eller efter sändning eller hämtning av dem från kanallagret. Mer information om hur du utökar tjänstkörningen finns i Utöka dispatchers. Mer information om de beteenden som ändrar och infogar anpassningsobjekt i klientkörningen finns i Konfigurera och utöka Körning med beteenden.

Klienter

På en klient konverterar ett WCF-klientobjekt eller en klientkanal metodanrop till utgående meddelanden och inkommande meddelanden till åtgärdsresultat som returneras till det anropande programmet. (Mer information om klienttyper finns i WCF-klientarkitektur.)

WCF-klienttyper har körningstyper som hanterar den här slutpunkts- och åtgärdsnivåfunktionen. När ett program anropar en åtgärd ClientOperation översätts de utgående objekten till ett meddelande, bearbetar interceptorer, bekräftar att det utgående samtalet överensstämmer med målkontraktet och ger utgående meddelande till , som ansvarar för att ClientRuntimeskapa och hantera utgående kanaler (och inkommande kanaler vid duplex-tjänster), hantera extra utgående meddelandebearbetning (till exempel sidhuvudändring). bearbeta meddelandeavlyssnare i båda riktningarna och dirigera inkommande duplex-anrop till lämpligt objekt på klientsidan DispatchRuntime . ClientOperation Både och ClientRuntime tillhandahåller liknande tjänster när meddelanden (inklusive fel) returneras till klienten.

Dessa två körningsklasser är huvudtillägget för att anpassa bearbetningen av WCF-klientobjekt och -kanaler. Klassen ClientRuntime gör det möjligt för användare att fånga upp och utöka klientkörningen för alla meddelanden i kontraktet. Klassen ClientOperation gör det möjligt för användare att fånga upp och utöka klientkörningen för alla meddelanden i en viss åtgärd.

Du kan ändra egenskaperna eller infoga anpassningar med hjälp av kontrakts-, slutpunkts- och åtgärdsbeteenden. Mer information om hur du använder dessa typer av beteenden för att utföra klientkörningsanpassningar finns i Konfigurera och utöka Körning med beteenden.

Scenarier

Det finns ett antal orsaker till att utöka klientsystemet, bland annat:

Använda Klassen ClientRuntime

Klassen ClientRuntime är en utökningspunkt där du kan lägga till tilläggsobjekt som fångar upp meddelanden och utökar klientbeteendet. Avlyssningsobjekt kan bearbeta alla meddelanden i ett visst kontrakt, endast bearbeta meddelanden för vissa åtgärder, utföra anpassad kanalinitiering och implementera andra anpassade klientprogrambeteenden.

  • Egenskapen CallbackDispatchRuntime returnerar körningsobjektet dispatch för tjänstinitierade återanropsklienter.

  • Egenskapen OperationSelector accepterar ett objekt för anpassad åtgärdsväljare.

  • Egenskapen ChannelInitializers gör det möjligt att lägga till en kanalinitierare som kan inspektera eller ändra klientkanalen.

  • Egenskapen Operations hämtar en samling ClientOperation objekt som du kan lägga till anpassade meddelandeavlyssnare som tillhandahåller funktioner som är specifika för meddelandena i den åtgärden.

  • Egenskapen ManualAddressing gör det möjligt för ett program att inaktivera vissa automatiska adresseringshuvuden för att styra adressering direkt.

  • Egenskapen Via anger värdet för meddelandets mål på transportnivå för att stödja mellanhänder och andra scenarier.

  • Egenskapen MessageInspectors hämtar en samling IClientMessageInspector objekt som du kan lägga till anpassade meddelandeavlyssnare för alla meddelanden som färdas via en WCF-klient.

Dessutom finns det ett antal andra egenskaper som hämtar kontraktsinformationen:

Om WCF-klienten är en duplex WCF-klient hämtar följande egenskaper även WCF-klientinformationen för återanrop:

Om du vill utöka WCF-klientkörningen över en hel WCF-klient granskar du de egenskaper som är tillgängliga för ClientRuntime klassen för att se om du skapar de funktioner du söker genom att ändra en egenskap eller implementera ett gränssnitt och lägga till den i en egenskap. När du har valt ett visst tillägg för att skapa infogar du tillägget i lämplig ClientRuntime egenskap genom att implementera ett klientbeteende som ger åtkomst till klassen när det ClientRuntime anropas.

Du kan infoga anpassade tilläggsobjekt i en samling med hjälp av ett åtgärdsbeteende (ett objekt som implementerar IOperationBehavior), ett kontraktsbeteende (ett objekt som implementerar ) eller ett slutpunktsbeteende IContractBehavior(ett objekt som implementerar IEndpointBehavior). Installationsbeteendeobjektet läggs till i lämplig samling beteenden antingen programmatiskt, deklarativt (genom att implementera ett anpassat attribut) eller genom att implementera ett anpassat BehaviorExtensionElement objekt för att göra det möjligt att infoga beteendet med hjälp av en programkonfigurationsfil. Mer information finns i Konfigurera och utöka körningen med beteenden.

Exempel som visar avlyssning över en WCF-klient finns i Så här inspekterar eller ändrar du meddelanden på klienten.

Använda klassen ClientOperation

Klassen ClientOperation är platsen för klientkörningsändringar och insättningspunkt för anpassade tillägg som endast är begränsade till en tjänståtgärd. (Om du vill ändra körningsbeteendet för klienten för alla meddelanden i ett kontrakt använder du ClientRuntime klassen.)

Använd egenskapen Operations för att hitta objektet ClientOperation som representerar en viss tjänståtgärd. Med följande egenskaper kan du infoga anpassade objekt i WCF-klientsystemet:

Med följande egenskaper kan du ändra systemet i interaktion med formaterings- och anpassade parameterkontrollanter:

  • Använd egenskapen SerializeRequest för att styra serialiseringen av ett utgående meddelande.

  • Använd egenskapen DeserializeReply för att styra deserialiseringen av ett inkommande meddelande.

  • Använd egenskapen Action för att styra åtgärden WS-Addressing för begärandemeddelandet.

  • BeginMethod Använd och EndMethod för att ange vilka WCF-klientmetoder som är associerade med en asynkron åtgärd.

  • Använd egenskapen FaultContractInfos för att hämta en samling som innehåller de typer som kan visas i SOAP-fel som detaljtyp.

  • IsInitiating Använd egenskaperna och IsTerminating för att styra om en session initieras eller rivs ned när åtgärden anropas.

  • Använd egenskapen IsOneWay för att kontrollera om åtgärden är en enkelriktad åtgärd.

  • Använd egenskapen Parent för att hämta det innehållande ClientRuntime objektet.

  • Använd egenskapen Name för att hämta namnet på åtgärden.

  • Använd egenskapen SyncMethod för att styra vilken metod som mappas till åtgärden.

Om du bara vill utöka WCF-klientkörningen i en enda tjänståtgärd granskar du de egenskaper som är tillgängliga för ClientOperation klassen för att se om du skapar de funktioner du söker genom att ändra en egenskap eller implementera ett gränssnitt och lägga till den i en egenskap. När du har valt ett visst tillägg för att skapa infogar du tillägget i lämplig ClientOperation egenskap genom att implementera ett klientbeteende som ger åtkomst till klassen när det ClientOperation anropas. I det beteendet kan du sedan ändra egenskapen så att den ClientRuntime passar dina krav.

Vanligtvis räcker det med att implementera ett åtgärdsbeteende (ett objekt som implementerar IOperationBehavior gränssnittet), men du kan också använda slutpunktsbeteenden och kontraktsbeteenden för att utföra samma sak genom att hitta OperationDescription för en viss åtgärd och koppla beteendet där. Mer information finns i Konfigurera och utöka körningen med beteenden.

Om du vill använda ditt anpassade beteende från konfigurationen installerar du ditt beteende med hjälp av en avsnittshanterare för anpassad beteendekonfiguration. Du kan också installera ditt beteende genom att skapa ett anpassat attribut.

Exempel som visar avlyssning över en WCF-klient finns i Så här kontrollerar eller ändrar du parametrar.

Se även