Zadania (41-44)
Zadanie 41
Section titled “Zadanie 41”Przykład użycia usługi SOAP w aplikacji na platformie .NET w języku C#
Section titled “Przykład użycia usługi SOAP w aplikacji na platformie .NET w języku C#”Aby skorzystać z usługi SOAP w aplikacji .NET, dodaje się do projektu referencję do usługi (Service Reference) na podstawie jej adresu i opisu WSDL. Środowisko generuje wtedy klasę pośredniczącą (proxy), która lokalnie odwzorowuje metody usługi. Dzięki temu zdalne metody usługi wywołuje się tak samo jak zwykłe metody lokalne, a proxy zajmuje się zamianą wywołania na komunikat SOAP i wysłaniem go przez sieć. Adres usługi i sposób komunikacji (binding) trafiają zwykle do pliku konfiguracyjnego (app.config), więc nie trzeba ich podawać w kodzie.
// utworzenie klienta proxy wygenerowanego na podstawie WSDL usługiMyServiceClient client = new MyServiceClient();
// wywołanie zdalnej metody usługi tak jak metody lokalnejint result = client.Add(2, 3);
// wyświetlenie wyniku zwróconego przez usługęConsole.WriteLine(result);
// zamknięcie połączenia z usługąclient.Close();Połączenie z usługą warto zwalniać niezawodnie, więc proxy często opakowuje się w blok using, który sam zamyka klienta po użyciu:
// using sam zamknie połączenie po wyjściu z blokuusing (MyServiceClient client = new MyServiceClient()){ int result = client.Add(2, 3); Console.WriteLine(result);}Skrót do zapamiętania: Dodajemy referencję do usługi (z WSDL), środowisko generuje klasę proxy, a zdalne metody wywołujemy jak lokalne (client.Add(2, 3)). Proxy zamienia wywołanie na komunikat SOAP. Adres i binding są w app.config.
- Dodanie Service Reference na podstawie adresu/WSDL.
- Generowana klasa proxy odwzorowuje metody usługi.
- Adres i binding zwykle w pliku konfiguracyjnym (app.config).
- Wywołanie zdalne wygląda jak lokalne:
client.Metoda(...). - Proxy zamienia wywołanie na komunikat SOAP i wysyła przez sieć.
Zadanie 42
Section titled “Zadanie 42”Technologia WCF - rola, przeznaczenie, zalety
Section titled “Technologia WCF - rola, przeznaczenie, zalety”WCF (Windows Communication Foundation) to ujednolicona platforma .NET do budowania i konsumowania aplikacji zorientowanych na usługi (SOA). Jej rolą jest dostarczenie jednego, spójnego modelu komunikacji między aplikacjami, który wcześniej był rozproszony po wielu osobnych technologiach (web services/SOAP, .NET Remoting, MSMQ, nazwane potoki). WCF łączy je pod wspólnym API.
Przeznaczeniem WCF jest tworzenie usług komunikujących się niezależnie od protokołu transportu i lokalizacji klienta. Do najważniejszych zalet należą: jeden jednolity model programowania niezależny od transportu, wsparcie wielu protokołów (HTTP, TCP, MSMQ, named pipes), wbudowane bezpieczeństwo, obsługa transakcji, niezawodne przesyłanie komunikatów oraz interoperacyjność z innymi platformami przez standardy web services.
Skrót do zapamiętania: WCF to jednolita platforma .NET do budowy usług (SOA), łącząca pod jednym API różne technologie komunikacji (SOAP, remoting, MSMQ, named pipes). Zalety: jeden model, wiele protokołów, bezpieczeństwo, transakcje, niezawodność, interoperacyjność.
- Ujednolicona platforma do tworzenia i konsumpcji usług (SOA).
- Łączy pod jednym API: web services/SOAP, remoting, MSMQ, named pipes.
- Niezależność od transportu i lokalizacji klienta.
- Zalety: jeden model, wiele protokołów, bezpieczeństwo, transakcje, niezawodne komunikaty, interoperacyjność.
Zadanie 43
Section titled “Zadanie 43”WCF - architektura, model programowania, przykłady implementacji usług
Section titled “WCF - architektura, model programowania, przykłady implementacji usług”Architektura WCF opiera się na pojęciu punktu końcowego (endpoint), który definiują trzy elementy określane skrótem ABC. Address (adres) mówi gdzie znajduje się usługa, Binding (powiązanie) określa jak się z nią komunikować (protokół transportu, kodowanie, bezpieczeństwo), a Contract (kontrakt) opisuje co usługa oferuje, czyli jej operacje. Usługa może być hostowana w IIS, w samodzielnej aplikacji (self-hosting) lub w WAS.
W modelu programowania kontrakt usługi definiuje się jako interfejs z atrybutem ServiceContract, a jego metody atrybutem OperationContract. Złożone dane przesyłane między klientem a usługą opisuje się atrybutem DataContract. Konkretna klasa implementuje interfejs kontraktu, dostarczając logikę operacji.
using System.ServiceModel;
// kontrakt usługi - interfejs oznaczony atrybutem ServiceContract[ServiceContract]public interface ICalculator{ // operacja udostępniana przez usługę - atrybut OperationContract [OperationContract] int Add(int a, int b);}
// implementacja usługi realizująca kontraktpublic class CalculatorService : ICalculator{ // właściwa logika operacji usługi public int Add(int a, int b) { return a + b; }}Skrót do zapamiętania: Architektura WCF = endpoint opisany przez ABC: Address (gdzie), Binding (jak), Contract (co). Model: interfejs z [ServiceContract], metody z [OperationContract], dane z [DataContract], klasa implementująca kontrakt. Hosting: IIS, self-host, WAS.
- Endpoint = ABC: Address (gdzie), Binding (jak), Contract (co).
- [ServiceContract] na interfejsie, [OperationContract] na metodach.
- [DataContract] dla złożonych danych przesyłanych w komunikatach.
- Klasa implementuje interfejs kontraktu (logika operacji).
- Hosting: IIS, self-hosting, WAS.
Zadanie 44
Section titled “Zadanie 44”WCF - przepływ transakcyjny
Section titled “WCF - przepływ transakcyjny”Przepływ transakcyjny (transaction flow) w WCF to mechanizm pozwalający, by klient i usługa uczestniczyli w jednej, wspólnej transakcji. Transakcja rozpoczęta po stronie klienta “przepływa” przez granicę usługi, dzięki czemu operacje wykonane u klienta i w usłudze są traktowane jako jedna niepodzielna całość (zgodnie z zasadami ACID): albo wszystkie zostaną zatwierdzone, albo wszystkie wycofane.
Aby przepływ transakcyjny działał, muszą współgrać trzy warunki: powiązanie (binding) musi go wspierać i mieć włączony (np. wsHttpBinding z transactionFlow ustawionym na true), operacja musi pozwalać na przepływ transakcji (atrybut TransactionFlow), a implementacja operacji musi działać w ramach transakcji (TransactionScopeRequired ustawione na true w OperationBehavior). Pod spodem WCF korzysta ze standardu WS-AtomicTransaction, a transakcje rozproszone koordynuje menedżer MSDTC.
Skrót do zapamiętania: Przepływ transakcyjny WCF pozwala klientowi i usłudze być w jednej transakcji (ACID, commit albo rollback razem). Wymaga: bindingu z transactionFlow=true, atrybutu TransactionFlow na operacji i TransactionScopeRequired=true w implementacji. Oparty na WS-AtomicTransaction + MSDTC.
- Transakcja klienta przepływa do usługi -> wspólna, niepodzielna całość (ACID).
- Wszystko commit albo wszystko rollback.
- Warunki: binding wspiera (wsHttpBinding, transactionFlow=true).
- Operacja: atrybut TransactionFlow; implementacja: TransactionScopeRequired=true.
- Pod spodem: WS-AtomicTransaction, koordynacja przez MSDTC.