wtorek, 12 lutego 2013

70-513 Wzorce wymiany komunikatów w WCF

Wymiana komunikatów w WCF opisana jest za pomocą protokołu MEP.

Request/Response
Najczęściej używany, gdyż nie wymaga praktycznie żadnej konfiguracji.
Wymagania co do tego typu komunikacji:
  • IsOneWay - false
  • brak duplexu
Wszystkie bindingi za wyjątkiem MSMQ obsługują ten rodzaj wymiany komunikatów.


OneWay
W tym przypadku ustawiamy wartość właściwości OneWay na true. W przypadku tego rodzaju wymiany, klient wysyła zapytanie do serwisu i nie oczekuje na żadną odpowiedź. Aspekty które należy rozważyć w przypadku tego rodzaju połączenia:
  • brak możliwości używania kontraktów typu Fault - serwis nie zwróci niczego, więc też nie powiadomi o występujących problemach
  • poprzedni punkt implikuje, iż nie jest to do końca bezpieczna metoda w przypadku gdy wysyłamy ważne dane. Nie mamy informacji zwrotnej czy dane zostały poprawnie zapisane np. do bazy danych
  • wywołanie w taki sposób akcji, może błędnie tworzyć obraz, iż akcja zostanie wykonana asynchronicznie. Niestety tak nie jest i należy pamiętać iż klient i tak zostanie zablokowany na czas wykonania akcji.

Duplex
Ten rodzaj komunikacji może być przydatny, gdy po wysłaniu wiadomości do serwera chcemy otrzymać od niego wiadomość zwrotną, nie koniecznie blokując wykonanie całej aplikacji. Oczywiście serwis może wysyłać do klienta także nie zamówione wiadomości.
Aby serwis był duplexowy należy w atrybucie ServiceContract uzupełnić właściwość CallbackContract wskazując interfejs pełniący rolę metody zwrotnej.
W przypadku tego rodzaju komunikacji należy ustanowić sesję pomiędzy klientem a serwisem za pomocą właściwości InstanceContextMode.
Sposób ten posiada szereg wad:
  • klient musi posiadać stały adres ip
  • brak skalowalności; konieczność zarządzania sesją; powrót do ery klient-serwer? 
  • nie wykorzystamy w przypadku innych platform np. Java
  • problemy z wielowątkowością 

Brak komentarzy:

Prześlij komentarz