Rozszerzanie klientów

W aplikacji wywołującej warstwa modelu usługi jest odpowiedzialna za tłumaczenie wywołań metod w kodzie aplikacji na komunikaty wychodzące, wypychanie ich do kanałów bazowych, tłumaczenie wyników z powrotem na zwracane wartości i parametry wyjściowe w kodzie aplikacji oraz zwracanie wyników z powrotem do obiektu wywołującego. Rozszerzenia modelu usług modyfikują lub implementują działanie lub komunikację oraz funkcje obejmujące funkcje klienta lub dyspozytora, zachowania niestandardowe, przechwytywanie komunikatów i parametrów oraz inne funkcje rozszerzalności.

W tym temacie opisano sposób używania ClientRuntime klas i ClientOperation w aplikacji klienckiej programu Windows Communication Foundation (WCF) w celu zmodyfikowania domyślnego zachowania wykonywania klienta programu WCF lub przechwytywania lub modyfikowania komunikatów, parametrów lub zwracania wartości przed wysłaniem lub pobraniem ich z warstwy kanału. Aby uzyskać więcej informacji na temat rozszerzania środowiska uruchomieniowego usługi, zobacz Rozszerzanie dyspozytorów. Aby uzyskać więcej informacji o zachowaniach, które modyfikują i wstawiają obiekty dostosowywania do środowiska uruchomieniowego klienta, zobacz Konfigurowanie i rozszerzanie środowiska uruchomieniowego za pomocą zachowań.

Klienci

Na kliencie obiekt klienta programu WCF lub kanał klienta konwertuje wywołania metody na komunikaty wychodzące i komunikaty przychodzące do wyników operacji zwracanych do aplikacji wywołującej. (Aby uzyskać więcej informacji na temat typów klientów, zobacz Architektura klienta programu WCF).

Typy klientów programu WCF mają typy środowiska uruchomieniowego obsługujące te funkcje na poziomie punktu końcowego i operacji. Gdy aplikacja wywołuje operację, ClientOperation obiekt wychodzący tłumaczy obiekty wychodzące na komunikat, przetwarza przechwytatory, potwierdza, że wywołanie wychodzące jest zgodne z kontraktem docelowym i przekazuje komunikat wychodzący do ClientRuntimeelementu , który jest odpowiedzialny za tworzenie kanałów wychodzących (i kanały przychodzące w przypadku usług dwukierunkowych), obsługę dodatkowego przetwarzania komunikatów wychodzących (na przykład modyfikacji nagłówka) przetwarzanie przechwytywania komunikatów w obu kierunkach i routingu przychodzących wywołań dwukierunkowych do odpowiedniego obiektu po stronie DispatchRuntime klienta. Zarówno usługi , jak ClientOperation i ClientRuntime zapewniają podobne usługi, gdy komunikaty (w tym błędy) są zwracane do klienta.

Te dwie klasy środowiska uruchomieniowego to główne rozszerzenie do dostosowywania przetwarzania obiektów i kanałów klienta WCF. Klasa ClientRuntime umożliwia użytkownikom przechwytywanie i rozszerzanie wykonywania klienta we wszystkich komunikatach w umowie. Klasa ClientOperation umożliwia użytkownikom przechwytywanie i rozszerzanie wykonywania klienta dla wszystkich komunikatów w danej operacji.

Modyfikowanie właściwości lub wstawianie dostosowań odbywa się przy użyciu zachowania kontraktu, punktu końcowego i operacji. Aby uzyskać więcej informacji na temat używania tego typu zachowań do wykonywania dostosowań środowiska uruchomieniowego klienta, zobacz Konfigurowanie i rozszerzanie środowiska uruchomieniowego przy użyciu zachowań.

Scenariusze

Istnieje wiele powodów rozszerzenia systemu klienckiego, w tym:

Korzystanie z klasy ClientRuntime

Klasa ClientRuntime to punkt rozszerzalności, do którego można dodawać obiekty rozszerzeń przechwytujące komunikaty i rozszerzające zachowanie klienta. Obiekty przechwytywania mogą przetwarzać wszystkie komunikaty w określonym kontrakcie, przetwarzać tylko komunikaty dla określonych operacji, wykonywać inicjowanie kanału niestandardowego i implementować inne niestandardowe zachowanie aplikacji klienckiej.

  • Właściwość CallbackDispatchRuntime zwraca obiekt czasu wykonywania wysyłania dla klientów wywołania zwrotnego zainicjowanego przez usługę.

  • Właściwość OperationSelector akceptuje obiekt selektora operacji niestandardowych.

  • Właściwość ChannelInitializers umożliwia dodanie inicjatora kanału, który może sprawdzać lub modyfikować kanał klienta.

  • Właściwość Operations pobiera kolekcję ClientOperation obiektów, do których można dodać niestandardowe przechwytniki komunikatów, które zapewniają funkcjonalność specyficzną dla komunikatów tej operacji.

  • Właściwość ManualAddressing umożliwia aplikacji wyłączenie niektórych nagłówków automatycznego adresowania w celu bezpośredniego kontrolowania adresowania.

  • Właściwość Via określa wartość miejsca docelowego komunikatu na poziomie transportu, aby wspierać pośredników i inne scenariusze.

  • Właściwość MessageInspectors pobiera kolekcję IClientMessageInspector obiektów, do których można dodać niestandardowe przechwytniki komunikatów dla wszystkich komunikatów podróżujących przez klienta WCF.

Ponadto istnieje wiele innych właściwości, które pobierają informacje o kontrakcie:

Jeśli klient programu WCF jest klientem dwukierunkowym WCF, następujące właściwości pobierają również informacje o kliencie WCF wywołania zwrotnego:

Aby rozszerzyć wykonywanie klienta WCF na całym kliencie WCF, przejrzyj właściwości dostępne w ClientRuntime klasie, aby sprawdzić, czy modyfikowanie właściwości lub implementowanie interfejsu i dodawanie go do właściwości tworzy szukaną funkcję. Po wybraniu określonego rozszerzenia do skompilowania wstaw rozszerzenie do odpowiedniej ClientRuntime właściwości, implementując zachowanie klienta, które zapewnia dostęp do ClientRuntime klasy podczas wywoływania.

Niestandardowe obiekty rozszerzenia można wstawić do kolekcji przy użyciu zachowania operacji (obiektu implementujący IOperationBehavior), zachowania kontraktu (obiektu implementujące IContractBehavior) lub zachowania punktu końcowego (obiektu, który implementuje IEndpointBehavior). Obiekt zachowania instalowania jest dodawany do odpowiedniej kolekcji zachowań programowo, deklaratywnie (implementując atrybut niestandardowy) lub przez zaimplementowanie obiektu niestandardowego BehaviorExtensionElement w celu umożliwienia wstawienia zachowania przy użyciu pliku konfiguracji aplikacji. Aby uzyskać szczegółowe informacje, zobacz Konfigurowanie i rozszerzanie środowiska uruchomieniowego przy użyciu zachowań.

Przykłady demonstrujące przechwytywanie w kliencie programu WCF można znaleźć w temacie How to: Inspect or Modify Messages on the Client (Instrukcje: inspekcja lub modyfikowanie komunikatów na kliencie).

Używanie klasy ClientOperation

Klasa ClientOperation jest lokalizacją modyfikacji czasu wykonywania klienta i punktu wstawiania dla rozszerzeń niestandardowych, które mają zakres tylko do jednej operacji usługi. (Aby zmodyfikować zachowanie czasu wykonywania klienta dla wszystkich komunikatów w umowie, użyj ClientRuntime klasy ).

Użyj właściwości , Operations aby zlokalizować ClientOperation obiekt reprezentujący określoną operację usługi. Następujące właściwości umożliwiają wstawianie obiektów niestandardowych do systemu klienta WCF:

Następujące właściwości umożliwiają modyfikowanie systemu w interakcji z inspektorem formatatora i niestandardowymi inspektorami parametrów:

  • Użyj właściwości , SerializeRequest aby kontrolować serializacji komunikatu wychodzącego.

  • DeserializeReply Użyj właściwości , aby kontrolować deserializacji komunikatu przychodzącego.

  • Action Użyj właściwości , aby kontrolować akcję adresowania WS komunikatu żądania.

  • BeginMethod Użyj elementu i EndMethod , aby określić, które metody klienta programu WCF są skojarzone z operacją asynchroniczną.

  • FaultContractInfos Użyj właściwości , aby uzyskać kolekcję zawierającą typy, które mogą występować w błędach protokołu SOAP jako typ szczegółów.

  • IsInitiating Użyj właściwości iIsTerminating, aby określić, czy sesja jest inicjowana, czy też jest rozdawana, odpowiednio po wywołaniu operacji.

  • Użyj właściwości , IsOneWay aby określić, czy operacja jest operacją jednokierunkową.

  • Parent Użyj właściwości , aby uzyskać obiekt zawierającyClientRuntime.

  • Name Użyj właściwości , aby uzyskać nazwę operacji.

  • Użyj właściwości , SyncMethod aby kontrolować, która metoda jest mapowana na operację.

Aby rozszerzyć wykonywanie klienta programu WCF tylko na jedną operację usługi, przejrzyj właściwości dostępne w ClientOperation klasie, aby sprawdzić, czy modyfikowanie właściwości, czy implementowanie interfejsu i dodawanie jej do właściwości powoduje utworzenie szukanej funkcji. Po wybraniu określonego rozszerzenia do skompilowania wstaw rozszerzenie do odpowiedniej ClientOperation właściwości, implementując zachowanie klienta, które zapewnia dostęp do ClientOperation klasy podczas wywoływania. Wewnątrz tego zachowania można zmodyfikować ClientRuntime właściwość, aby dopasować ją do wymagań.

Zazwyczaj implementowanie zachowania operacji (obiektu, który implementuje IOperationBehavior interfejs), wystarczy, ale można również użyć zachowań punktów końcowych i zachowań kontraktów, aby osiągnąć to samo, lokalizując OperationDescription dla konkretnej operacji i dołączając tam zachowanie. Aby uzyskać szczegółowe informacje, zobacz Konfigurowanie i rozszerzanie środowiska uruchomieniowego przy użyciu zachowań.

Aby użyć niestandardowego zachowania z konfiguracji, zainstaluj zachowanie przy użyciu niestandardowej procedury obsługi sekcji konfiguracji zachowania. Zachowanie można również zainstalować, tworząc atrybut niestandardowy.

Przykłady demonstrujące przechwytywanie w kliencie programu WCF można znaleźć w temacie Instrukcje: inspekcja lub modyfikowanie parametrów.

Zobacz też