Skip to content

Zadania (41-44)

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ługi
MyServiceClient client = new MyServiceClient();
// wywołanie zdalnej metody usługi tak jak metody lokalnej
int 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 bloku
using (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ć.

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ść.

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 kontrakt
public 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.

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.