Pierwszym, ważnym aspektem serwisu stworzonego w WCF jest zdefiniowanie kontraktów. Określają one między innymi format wysyłanej wiadomości, odpowiedź na nią. Odpowiadają także na pytanie co w razie błędów. Definiujemy trzy rodzaje kontraktów, które zostaną kolejno omówione.
Behavioral Contracts
Behavioral Contracts określają w jaki sposób zachowuje się serwis. Podstawowym atrybutem nakładanym w tej kategorii jest ServiceContract. Atrybut ten dodajemy do klasy bądź interfejsu - ze szczególnym naciskiem na interfejs (jest to bardziej eleganckie rozwiązanie). Atrybut ten posiada szereg właściwości:
- Name - nazwa kontraktu - domyślnie jest to nazwa interfejsu bądź klasy. Nazwa ta jest później używana w polu portType aplikacji, która konsumuje serwis
- Namespace - przestrzeń nazw dla definicji WSDL
- CallbackContract - interfejs biorący udział w przypadku komunikacji dwustronnej (duplex)
- ProtectionLevel - decyduje o tym w jaki sposób są chronione wiadomości (szyfrowanie, podpis cyfrowy)
- ConfigurationName - nazwa konfiguracji w pliku konfiguracyjnym (web.config/app.config)
- SessionMode - konfiguracja sesji
- Name - nazwa operacji - domyślnie nazwa metody
- Action - nagłówek akcji
- ReplyAction - nagłówek odpowiedzi
- IsOneWay - definiuje czy akcja jest tylko w jedną stornię - nie jest wtedy brany pod uwagę nagłówek zdefiniowany w ReplyAction
- ProtectionLevel - szyfrowanie dla pojedynczej metody
- IsInitiating - definiuje czy wywołanie tej metody tworzy nową sesję pomiędzy wywołującym a serwisem
- IsTerminating - definiuje czy wywołanie tej metody kończy istniejącą sesję
Code:
Kolejnym możliwym atrybutem do nadania jest MessageParameter. Określa on w jaki sposób nazwy zmiennych przekazywanych do operacji są nazwane w XMLu powstałym w wyniku serializacji obiektów.
Przykład:
Code:
Fault Contracts
Kontrakt tego typu opisuje co w przypadku błędów w serwisie zostanie wysłane do klienta. Należy sobie uświadomić, że Fault to nie jest to samo co Exception.
Exception to główny sposób powiadamiania w .NET o błędach podczas wykonywania aplikacji. Fault to wiadomość o błędzie w kontekście protokołu SOAP.
WCF posiada klasę FaultException, którą można traktować jako obiekt Proxy pomiędzy światem web serwisem a platformą .NET. Klasa FualtException posiada dwie wersje:
- FaultException - nietypowany wyjątek
- FaultException<TDetail> - generyczna wersja wyjątku
- atrybut można nałożyć tylko na operacje
- atrybut ten nie jest dziedziczony
- może być nałożony na operację kilka razy (np. w celu zaznaczenia iż metoda może rzucić kilka różnych rodzajów wyjątków)
- konstruktor przyjmuje typ wyjątku
Code:
Wkradł się chyba błąd:
OdpowiedzUsuńPodstawowym atrybutem nakładanym w tej kategorii jest OperationContract.
i zaraz potem:
Kolejnym atrybutem który możemy zastosować to OperationContract.
W pierwszym zdaniu powinno być raczej ServiceContract.
Dzięki za czujność :) poprawione.
Usuń