ABC WCF adam.furmanek@studentpartner.com
Agenda WS, SOAP, REST Czym jest WCF? ABC WCF Usługa WCF Klient WCF Demo: prognoza pogody Demo: przesyłanie plików Pozostałe aspekty WCF Podsumowanie
WS, SOAP, REST Ale o co chodzi?
O co chodzi Chcemy wystawić na świat usługę Chcemy, aby ta usługa była zjadliwa dla każdego (a przynajmniej dla jak najszerszego grona użytkowników) Chcemy, aby działała niezależnie od platformy Chcemy jak najmniej się napracować
WS WS = Web Service System zaprojektowany do wspierania międzymaszynowej komunikacji poprzez sieć Posiada interfejs opisany przy pomocy WSDL (Web Service Description Language) Przykład: http://www.webservicex.net/ws/wsdetails.aspx?c atid=12&wsid=56
SOAP SOAP - dawniej Simple Object Access Protocol SOAP!= SOA Protokół przeznaczony do wymiany informacji przy użyciu Web Service ów Opiera się na XML, działa w oparciu o inne protokoły warstwy aplikacji (głównie HTTP)
SOAP Processing model reguły przetwarzania wiadomości SOAP Extensibility model możliwości i moduły Underlying protocol binding reguły definiowania powiązań z innymi protokołami Message construct struktura wiadomości SOAP
SOAP Processing model Zdefiniowane są następujące node y: Nadawca wysyła wiadomość Odbiorca odbiera wiadomość Ścieżka node y, przez które przechodzi wiadomość Nadawca początkowy nadawca, który wysłał wiadomość na początku ścieżki Pośrednik jednocześnie nadawca i odbiorca, przekazuje wiadomość dalej Ostateczny odbiorca cel dotarcia wiadomości
SOAP używane protokoły HTTP najpopularniejszy sposób używania SOAP, głównie ze względu na popularność oraz poprawne działanie z firewallami SMTP, HTTPS, SOAP-over-UDP AMQP Advanced Message Queuing Protocol
SOAP - wiadomość Oparta o XML ze względu na popularność, łatwość przetwarzania przez maszynę i człowieka, duży zestaw narzędzi POST /InStock HTTP/1.1 Host: www.example.org Content-Type: application/soap+xml; charset=utf-8 Content-Length: 299 SOAPAction: "http://www.w3.org/2003/05/soap-envelope" <?xml version="1.0"?> <soap:envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> <soap:header> </soap:header> <soap:body> <m:getstockprice xmlns:m="http://www.example.org/stock"> <m:stockname>ibm</m:stockname> </m:getstockprice> </soap:body> </soap:envelope>
REST REST = Representational State Transfer Wzorzec architektoniczny, wprowadza jednorodny interfejs, bezstanową komunikację Wykorzystywany np. w ROR, Django Oparty najczęściej o HTTP, wykorzystuje jego standardowe operacje: GET, POST, PUT i DELETE
Czym jest WCF?
WCF WCF = Windows Communication Foundation Jeden z czterech głównych elementów.net Model programowania Service Oriented Application
WCF WCF dostarcza o SDK do tworzenia SOA o Środowiska do uruchamiania usług dla systemu Windows Usługi wymieniają wiadomości SOAP WCF bierze na siebie opakowywanie treści
WCF Dlaczego WCF? Przenośny i oparty o standardy wspiera wiele protokołów WS Łączy poprzednie modele programowania -.NET Remoting, ASMX web services, COM+ itp. Zajmuje się żmudną częścią opakowywania wiadomości Deklaratywny (atrybuty), imperatywny (obiekty), konfigurowalny
MARKETING
ABC WCF
ABC WCF A = Address (Where) B = Binding (How) C = Contract (What) Message
ABC WCF Każda usługa WCF posiada: Adres o Gdzie usługa jest Binding o Jak rozmawiać z usługą Kontrakt o Co usługa potrafi
ABC WCF Address Binding Contract
A jak adres Połączenie transportu, nazwy serwera, portu i ścieżki Transport jest wyznaczony przez binding Przykłady http://localhost:8001 net.tcp://localhost:8002/myservice net.pipe://localhost/mypipe net.msmq://localhost/private/myservice net.msmq://localhost/myservice
B jak binding Transport o o o HTTP TCP MSMQ Format wiadomości i kodowanie o o o Plain text Binary Message Transmission Optimization Mechanism (MTOM) Bezpieczeństwo o o o o Brak Transport Wiadomość Autoryzacja użytkowników
B jak binding BasicHttpBinding WSHttpBinding WS2007HttpBinding WSDualHttpBinding WSFederationHttp Binding WS2007FederationHttp Binding NetTcpBinding NetNamedPipeBinding NetMsmqBinding NetPeerTcpBinding WebHttpBinding MsmqIntegrationBinding
C jak contract Service contracts o Definiują operacje, komunikację i zachowanie Data contracts o Definiują encje i typy parametrów Fault contracts o Definiują typy błędów Message contracts o Definiują format wiadomości
4 zasady WCF Share schema, not class. Behaviors such as passing complete classes, methods and all, across service boundaries aren t allowed. Services are autonomous. A service and its clients agree on the interface between them, but are otherwise independent. Boundaries are explicit. Hiding distribution is not a goal. Use policy-based compatibility. The ability for a client to consume a service is based on the intersection of what the client supports and what the service supports.
Usługa WCF
Usługa WCF Service class zaimplementowana w dowolnym języku opartym o CLR Host proces coś, co odpali naszą usługę Endpoint przynajmniej jedno wyjście na świat
Service contract, Operation contract Service to klasa o o opatrzona atrybutem ServiceContract Implementująca interfejs opatrzony tym atrybutem Posiada metody opatrzone atrybutem OperationContract [ServiceContract] public interface IService { [OperationContract] string GetData(int value); } public class ConcreteService : IService { public string GetData(int value) {... } } public string OtherMethod() {... }
Data contract DataContract oznacza typ jako typ kontraktu DataMember oznacza składową jako część kontraktu [DataContract] public class CustomType { [DataMember] public bool MyFlag { get; set; } [DataMember] public string MyString { get; set; } }
Hostowanie usługi IIS o Tylko HTTP WAS (Windows Activation Service) o Może używać dowolnego tranposrtu o Przynajmniej Vista i Windows Server 2008 Self-hosting o Może używać dowolnego transportu o Można hostować wewnątrz Console, WinForms, WPF itp.
Self-hosting using System.ServiceModel; public class ServiceHost { public static void Main() { ServiceHost s = new ServiceHost(typeof(MyService)); s.open(); Console.Writeline("Press ENTER to end service"); Console.Readline(); s.close(); } }
Bindingi WCF oferuje predefiniowane bindingi wykorzystujące popularne mechanizmy Jedna usługa może mieć wiele bindingów, każdy innego typu Można je konfigurować dynamicznie (z poziomu kodu) lub w appconfigach (przy pomocy xmla)
Binding z poziomu kodu using System.ServiceModel; public class ServiceHost { public static void Main() { ServiceHost s = new ServiceHost(typeof(MyService)); s.addendpoint(typeof(myservice), new BasicHttpBinding(), "http://www.example.com/sample/service.svc"); s.open(); Console.Writeline("Press ENTER to end service"); Console.Readline(); s.close(); } }
Binding w pliku konfiguracyjnym <configuration> <system.servicemodel> <services> <service type="myservice"> <endpoint contract="iservice" binding= basichttpbinding address= " http://www.example.com/sample/service.svc "/> </service> </services> </system.servicemodel> </configuration>
Metadata exchange Service może również wystawić endpoint dla Metadata Exchange (MEX) Pozwala on na poinformowanie klientów o: o Adresach pozostałych endpointów o Użytych bindingach o Użytych kontraktach
Klient WCF
Klient WCF Klient musi utworzyć proxy, które zajmie się wszystkim Może napisać je ręcznie lub wygenerować Client Proxy WCF Host Process Service Class WCF Host Process
Klient WCF Do wygenerowania proxy można użyć: o Narzędzia SvcUtil.exe (dołączony do VS) o Opcji Add Service Reference (patrz demo) Można również komunikować się bardziej niskopoziomowo przy pomocy ChannelFactory
Demo
Pozostałe aspekty WCF
Pozostałe aspekty Póki co wykorzystywaliśmy tylko RPC, WCF wspiera również: o Asynchronous RPC o Wiadomości (Fire & Forget) o Bezpośrednie manipulowanie wiadomościami SOAP
Pozostałe aspekty W WCF możemy kontrolować również wielowątkowość liczbę wątków per aplikacja lub per context Mamy też wiele opcji bezpieczeństwa: HTTPS, autoryzacja i autentykacja klienta, własne bindingi z własną autentykacją, standardowe mechanizmy.net WCF pozwala również na tworzenie transakcji czy to przez atrybuty czy też przez bezpośrednie użycie System.Transactions
Pozostałe aspekty WCF wspiera też REST [ServiceContract] interface IReservations { [OperationContract] [WebGet] bool Check(string vehicleclass, int location, string dates); } [OperationContract] [WebInvoke] string Reserve(string vehicleclass, int location, string dates); [OperationContract] [WebInvoke(Method="DELETE")] bool Cancel(string reservation);
Pozostałe aspekty WCF wspiera kolejki: o MSMQ o MSMQ-MQSeries bridge WCF jest rozszerzalny własne kanały, walidatory Dodanie usługi WCF nie łamie istniejącej aplikacji
Pytania?
Dzięki za uwagę! adam.furmanek@studentpartner.com