Podstawowe pojęcia programu Windows Communication Foundation

Ten dokument zawiera ogólny widok architektury programu Windows Communication Foundation (WCF). Ma ona na celu wyjaśnienie kluczowych pojęć i sposobu ich dopasowania. Aby zapoznać się z samouczkiem dotyczącym tworzenia najprostszej wersji usługi I klienta WCF, zobacz Wprowadzenie Samouczek. Aby dowiedzieć się więcej na temat programowania WCF, zobacz Podstawowe programowanie WCF.

Podstawy programu WCF

WCF to środowisko uruchomieniowe i zestaw interfejsów API do tworzenia systemów, które wysyłają komunikaty między usługami i klientami. Ta sama infrastruktura i interfejsy API są używane do tworzenia aplikacji komunikujących się z innymi aplikacjami w tym samym systemie komputerowym lub w systemie, który znajduje się w innej firmie i jest dostępny za pośrednictwem Internetu.

Obsługa komunikatów i punktów końcowych

Program WCF jest oparty na koncepcji komunikacji opartej na komunikatach i wszystkie elementy, które mogą być modelowane jako komunikat (na przykład żądanie HTTP lub komunikat kolejkowania komunikatów (znany również jako MSMQ) mogą być reprezentowane w jednolity sposób w modelu programowania. Umożliwia to ujednolicony interfejs API w różnych mechanizmach transportu.

Model rozróżnia klientów, które są aplikacjami, które inicjują komunikację, i usługami, czyli aplikacjami, które oczekują na komunikację klientów i reagują na komunikację. Pojedyncza aplikacja może działać zarówno jako klient, jak i usługa. Aby zapoznać się z przykładami, zobacz Usługi dwukierunkowe i sieć równorzędna.

Komunikaty są wysyłane między punktami końcowymi. Punkty końcowe to miejsca, w których komunikaty są wysyłane lub odbierane (lub oba), a także definiują wszystkie informacje wymagane do wymiany komunikatów. Usługa uwidacznia co najmniej jeden punkt końcowy aplikacji (a także zero lub więcej punktów końcowych infrastruktury), a klient generuje punkt końcowy zgodny z jednym z punktów końcowych usługi.

Punkt końcowy opisuje standardowy sposób wysyłania komunikatów, sposobu ich wysyłania i wyglądu komunikatów. Usługa może uwidocznić te informacje jako metadane, które klienci mogą przetwarzać w celu wygenerowania odpowiednich klientów programu WCF i stosów komunikacji.

Protokoły komunikacyjne

Jednym z wymaganych elementów stosu komunikacyjnego jest protokół transportowy. Wiadomości można wysyłać za pośrednictwem intranetów i Internetu przy użyciu typowych transportów, takich jak HTTP i TCP. Inne transporty są uwzględnione, które obsługują komunikację z aplikacjami i węzłami kolejkowania komunikatów w siatkach sieci równorzędnych. Więcej mechanizmów transportu można dodać przy użyciu wbudowanych punktów rozszerzeń programu WCF.

Innym wymaganym elementem w stosie komunikacji jest kodowanie określające sposób formatowania dowolnego komunikatu. Program WCF zapewnia następujące kodowanie:

  • Kodowanie tekstu, kodowanie z możliwością współdziałania.

  • Kodowanie mechanizmu optymalizacji transmisji komunikatów (MTOM, Message Transmission Optimization Mechanism), które jest sposobem efektywnego wysyłania danych binarnych bez struktury do i z usługi.

  • Kodowanie binarne na potrzeby wydajnego transferu.

Więcej mechanizmów kodowania (na przykład kodowanie kompresji) można dodać przy użyciu wbudowanych punktów rozszerzeń programu WCF.

Wzorce komunikatów

Program WCF obsługuje kilka wzorców obsługi komunikatów, w tym żądanie-odpowiedź, jednokierunkową i dwukierunkową komunikację. Różne transporty obsługują różne wzorce obsługi komunikatów, a tym samym wpływają na typy obsługiwanych przez nich interakcji. Interfejsy API i środowisko uruchomieniowe programu WCF ułatwiają również bezpieczne i niezawodne wysyłanie komunikatów.

Warunki programu WCF

Inne pojęcia i terminy używane w dokumentacji programu WCF obejmują następujące elementy:

Wiadomość
Samodzielna jednostka danych, która może składać się z kilku części, w tym treści i nagłówków.

Usługa
Konstrukcja, która uwidacznia jeden lub więcej punktów końcowych, z każdym punktem końcowym uwidaczniającym co najmniej jedną operację usługi.

Punkt końcowy
Konstrukcja, w której komunikaty są wysyłane lub odbierane (lub oba). Zawiera lokalizację (adres), która definiuje, gdzie można wysyłać komunikaty, specyfikację mechanizmu komunikacji (powiązania), który opisuje sposób wysyłania komunikatów, oraz definicję zestawu komunikatów, które mogą być wysyłane lub odbierane (lub oba) w tej lokalizacji (kontrakt usługi), który opisuje, jaki komunikat można wysłać.

Usługa WCF jest widoczna dla świata jako kolekcja punktów końcowych.

Punkt końcowy aplikacji
Punkt końcowy uwidoczniony przez aplikację i odpowiadający kontraktowi usługi implementowanemu przez aplikację.

Punkt końcowy infrastruktury
Punkt końcowy, który jest udostępniany przez infrastrukturę w celu ułatwienia funkcjonalności, która jest potrzebna lub dostarczana przez usługę, która nie odnosi się do umowy usługi. Na przykład usługa może mieć punkt końcowy infrastruktury, który dostarcza informacje o metadanych.

Address
Określa lokalizację odbierania komunikatów. Jest on określany jako identyfikator URI (Uniform Resource Identifier). Część schematu identyfikatora URI nazywa mechanizm transportu używany do dotarcia do adresu, takiego jak HTTP i TCP. Hierarchiczna część identyfikatora URI zawiera unikatową lokalizację, której format jest zależny od mechanizmu transportu.

Adres punktu końcowego umożliwia tworzenie unikatowych adresów punktów końcowych dla każdego punktu końcowego w usłudze lub, w określonych warunkach, udostępnianie adresu między punktami końcowymi. W poniższym przykładzie pokazano adres używający protokołu HTTPS z portem innym niż domyślny:

HTTPS://cohowinery:8005/ServiceModelSamples/CalculatorService

Powiązanie
Definiuje sposób komunikowania się punktu końcowego ze światem. Jest on skonstruowany z zestawu składników nazywanych elementami powiązania, które "stos" jeden na drugim w celu utworzenia infrastruktury komunikacyjnej. Co najmniej powiązanie definiuje transport (taki jak HTTP lub TCP) i używane kodowanie (takie jak tekst lub binarny). Powiązanie może zawierać elementy powiązania, które określają szczegóły, takie jak mechanizmy zabezpieczeń używane do zabezpieczania komunikatów lub wzorzec komunikatu używany przez punkt końcowy. Aby uzyskać więcej informacji, zobacz Konfigurowanie usług.

Binding, element
Reprezentuje konkretny element powiązania, taki jak transport, kodowanie, implementacja protokołu na poziomie infrastruktury (np. WS-ReliableMessaging) lub dowolny inny składnik stosu komunikacji.

Zachowania
Składnik, który kontroluje różne aspekty czasu wykonywania usługi, punktu końcowego, konkretnej operacji lub klienta. Zachowania są pogrupowane zgodnie z zakresem: typowe zachowania wpływają na wszystkie punkty końcowe globalnie, zachowania usługi wpływają tylko na aspekty związane z usługą, zachowania punktów końcowych mają wpływ tylko na właściwości związane z punktem końcowym, a zachowania na poziomie operacji wpływają na określone operacje. Na przykład jedno zachowanie usługi jest ograniczane, co określa, jak usługa reaguje, gdy nadmiar komunikatów zagraża przeciążeniu możliwości obsługi. Zachowanie punktu końcowego, z drugiej strony, kontroluje tylko aspekty, które są istotne dla punktów końcowych, takich jak sposób i gdzie znaleźć poświadczenia zabezpieczeń.

Powiązania dostarczone przez system
Program WCF zawiera wiele powiązań dostarczonych przez system. Są to kolekcje elementów powiązania zoptymalizowanych pod kątem określonych scenariuszy. Na przykład element WSHttpBinding jest przeznaczony do współdziałania z usługami, które implementują różne specyfikacje WS-*. Te wstępnie zdefiniowane powiązania oszczędzają czas, przedstawiając tylko te opcje, które można prawidłowo zastosować do określonego scenariusza. Jeśli wstępnie zdefiniowane powiązanie nie spełnia wymagań, możesz utworzyć własne powiązanie niestandardowe.

Konfiguracja a kodowanie
Kontrolę nad aplikacją można kontrolować za pomocą kodowania, konfiguracji lub kombinacji obu tych metod. Konfiguracja ma zaletę zezwalania innej osobie niż deweloper (na przykład administrator sieci) na ustawianie parametrów klienta i usługi po zapisaniu kodu i bez konieczności ponownego kompilowania. Konfiguracja umożliwia nie tylko ustawianie wartości, takich jak adresy punktów końcowych, ale także umożliwia dalszą kontrolę, umożliwiając dodawanie punktów końcowych, powiązań i zachowań. Kodowanie pozwala deweloperowi zachować ścisłą kontrolę nad wszystkimi składnikami usługi lub klienta, a wszystkie ustawienia wykonywane za pomocą konfiguracji można sprawdzić i w razie potrzeby zastąpić kodem.

Operacja usługi
Procedura zdefiniowana w kodzie usługi, która implementuje funkcje operacji. Ta operacja jest widoczna dla klientów jako metody na kliencie WCF. Metoda może zwracać wartość i może przyjmować opcjonalną liczbę argumentów lub nie przyjmować argumentów i nie zwracać żadnej odpowiedzi. Na przykład operacja, która działa jako prosta "Hello", może służyć jako powiadomienie o obecności klienta i rozpocząć serię operacji.

Kontrakt usługi
Łączy ze sobą wiele powiązanych operacji w jedną jednostkę funkcjonalną. Kontrakt może definiować ustawienia na poziomie usługi, takie jak przestrzeń nazw usługi, odpowiedni kontrakt wywołania zwrotnego i inne takie ustawienia. W większości przypadków kontrakt jest definiowany przez utworzenie interfejsu w wybranym języku programowania i zastosowanie atrybutu ServiceContractAttribute do interfejsu. Rzeczywisty kod usługi jest wynikiem implementacji interfejsu.

Kontrakt operacji
Kontrakt operacji definiuje parametry i zwracany typ operacji. Podczas tworzenia interfejsu definiującego kontrakt usługi należy podpisać kontrakt operacji, stosując OperationContractAttribute atrybut do każdej definicji metody będącej częścią kontraktu. Operacje można modelować jako pobieranie pojedynczego komunikatu i zwracanie pojedynczego komunikatu lub jako pobieranie zestawu typów i zwracanie typu. W tym drugim przypadku system określi format komunikatów, które należy wymienić dla tej operacji.

Kontrakt komunikatu
Opisuje format komunikatu. Na przykład deklaruje, czy elementy komunikatu powinny znajdować się w nagłówkach, w porównaniu z treścią, jaki poziom zabezpieczeń należy zastosować do elementów komunikatu itd.

Kontrakt błędu
Można skojarzyć z operacją usługi, aby oznaczyć błędy, które mogą zostać zwrócone do elementu wywołującego. Operacja może zawierać zero lub więcej skojarzonych błędów. Te błędy to błędy protokołu SOAP, które są modelowane jako wyjątki w modelu programowania.

Kontrakt danych
Opisy w metadanych typów danych używanych przez usługę. Dzięki temu inni mogą współpracować z usługą. Typy danych mogą być używane w dowolnej części komunikatu, na przykład jako parametry lub typy zwracane. Jeśli usługa używa tylko prostych typów, nie ma potrzeby jawnego używania kontraktów danych.

Hosting
Usługa musi być hostowana w pewnym procesie. Host to aplikacja, która kontroluje okres istnienia usługi. Usługi mogą być hostowane samodzielnie lub zarządzane przez istniejący proces hostingu.

Samoobsługa
Usługa uruchamiana w aplikacji procesowej utworzonej przez dewelopera. Deweloper kontroluje jego okres istnienia, ustawia właściwości usługi, otwiera usługę (która ustawia ją w tryb nasłuchiwania) i zamyka usługę.

Proces hostingu
Aplikacja przeznaczona do hostowania usług. Obejmują one usługi Internet Information Services (IIS), usługi aktywacji systemu Windows (WAS) i usługi systemu Windows. W tych hostowanych scenariuszach host kontroluje okres istnienia usługi. Na przykład za pomocą usług IIS można skonfigurować katalog wirtualny zawierający plik zestawu usługi i konfiguracji. Po odebraniu komunikatu usługi IIS uruchamiają usługę i kontrolują jej okres istnienia.

Tworzenie wystąpienia
Usługa ma model instancingu. Istnieją trzy modele ściągnięcia: "pojedynczy", w którym jeden obiekt CLR obsługuje wszystkich klientów; " na wywołanie", w którym tworzony jest nowy obiekt CLR do obsługi każdego wywołania klienta; i "na sesję", w której jest tworzony zestaw obiektów CLR, jeden dla każdej oddzielnej sesji. Wybór modelu instancing zależy od wymagań aplikacji i oczekiwanego wzorca użycia usługi.

Aplikacja kliencka
Program, który wymienia komunikaty z co najmniej jednym punktem końcowym. Aplikacja kliencka rozpoczyna się od utworzenia wystąpienia klienta WCF i wywołania metod klienta WCF. Należy pamiętać, że pojedyncza aplikacja może być zarówno klientem, jak i usługą.

Kanał
Konkretna implementacja elementu powiązania. Powiązanie reprezentuje konfigurację, a kanał jest implementacją skojarzona z tą konfiguracją. W związku z tym istnieje kanał skojarzony z każdym elementem powiązania. Stos kanałów nawzajem, aby utworzyć konkretną implementację powiązania: stos kanału.

Klient programu WCF
Konstrukcja aplikacji klienckiej, która uwidacznia operacje usługi jako metody (w wybranym języku programowania .NET Framework, takim jak Visual Basic lub Visual C#). Każda aplikacja może hostować klienta WCF, w tym aplikację, która hostuje usługę. W związku z tym można utworzyć usługę obejmującą klientów WCF innych usług.

Klienta programu WCF można wygenerować automatycznie przy użyciu narzędzia ServiceModel Metadata Tool (Svcutil.exe) i wskazywania go w uruchomionej usłudze publikującej metadane.

Metadane
W usłudze opisano charakterystykę usługi, którą jednostka zewnętrzna musi zrozumieć, aby komunikować się z usługą. Metadane mogą być używane przez narzędzie ServiceModel Metadata Tool (Svcutil.exe), aby wygenerować klienta programu WCF i towarzyszącą konfigurację, której aplikacja kliencka może używać do interakcji z usługą.

Metadane uwidocznione przez usługę obejmują dokumenty schematu XML, które definiują kontrakt danych usługi i dokumenty WSDL, które opisują metody usługi.

Po włączeniu metadane usługi są generowane automatycznie przez usługę WCF, sprawdzając usługę i jej punkty końcowe. Aby opublikować metadane z usługi, należy jawnie włączyć zachowanie metadanych.

Bezpieczeństwo
W programie WCF obejmuje poufność (szyfrowanie komunikatów w celu zapobiegania podsłuchiwaniu), integralność (środki wykrywania naruszenia komunikatu), uwierzytelnianie (środki weryfikacji serwerów i klientów) oraz autoryzacja (kontrola dostępu do zasobów). Te funkcje są udostępniane przez wykorzystanie istniejących mechanizmów zabezpieczeń, takich jak protokół TLS za pośrednictwem protokołu HTTP (nazywanego również protokołem HTTPS), albo przez zaimplementowanie co najmniej jednej z różnych specyfikacji zabezpieczeń WS-*.

Tryb zabezpieczeń transportu
Określa, że poufność, integralność i uwierzytelnianie są udostępniane przez mechanizmy warstwy transportu (takie jak HTTPS). W przypadku korzystania z transportu, takiego jak HTTPS, ten tryb ma przewagę nad wydajnością i dobrze zrozumiały ze względu na powszechność występowania w Internecie. Wadą jest to, że tego rodzaju zabezpieczenia są stosowane oddzielnie na każdym przeskoku w ścieżce komunikacyjnej, dzięki czemu komunikacja jest podatna na atak "człowieka w środku".

Tryb zabezpieczeń komunikatów
Określa, że zabezpieczenia są zapewniane przez zaimplementowanie co najmniej jednej specyfikacji zabezpieczeń, takich jak specyfikacja o nazwie Zabezpieczenia usług sieci Web: SOAP Message Security. Każdy komunikat zawiera niezbędne mechanizmy zapewnienia bezpieczeństwa podczas ich przesyłania oraz umożliwia odbiornikom wykrywanie manipulacji i odszyfrowywanie komunikatów. W tym sensie zabezpieczenia są hermetyzowane w każdym komunikacie, zapewniając kompleksowe zabezpieczenia na wielu przeskokach. Ponieważ informacje o zabezpieczeniach stają się częścią komunikatu, istnieje również możliwość uwzględnienia wielu rodzajów poświadczeń z komunikatem (są one nazywane oświadczeniami). Takie podejście ma również zaletę umożliwienia bezpiecznego podróżowania przez każdy transport, w tym wielu transportów między jego pochodzeniem a miejscem docelowym. Wadą tego podejścia jest złożoność stosowanych mechanizmów kryptograficznych, co skutkuje implikacjami wydajności.

Transport z trybem zabezpieczeń poświadczeń komunikatu
Określa użycie warstwy transportu do zapewnienia poufności, uwierzytelniania i integralności komunikatów, podczas gdy każdy z komunikatów może zawierać wiele poświadczeń (oświadczeń) wymaganych przez odbiorców wiadomości.

WS-*
Skrót dotyczący rosnącego zestawu specyfikacji usługi internetowej (WS), takich jak WS-Security, WS-ReliableMessaging itd., które są implementowane w programie WCF.

Zobacz też