Darmowy fragment publikacji:
Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości
lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione.
Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie
książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie
praw autorskich niniejszej publikacji.
Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi
bądź towarowymi ich właścicieli.
Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce
informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności
ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych
lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności
za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce.
Redaktor prowadzący: Ewelina Burska
Projekt okładki: Studio Gravite/Olsztyn
Obarek, Pokoński, Pazdrijowski, Zaprucki
Wydawnictwo HELION
ul. Kościuszki 1c, 44-100 GLIWICE
tel. 32 231 22 19, 32 230 98 63
e-mail: helion@helion.pl
WWW: http://helion.pl (księgarnia internetowa, katalog książek)
Drogi Czytelniku!
Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres
http://helion.pl/user/opinie?wfcodp
Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
Kody źródłowe wykorzystane w książce można znaleźć pod adresem:
ftp://ftp.helion.pl/przyklady/wfcodp.zip
ISBN: 978-83-246-3094-3
Copyright © Helion 2012
Printed in Poland.
• Kup książkę
• Poleć książkę
• Oceń książkę
• Księgarnia internetowa
• Lubię to! » Nasza społeczność
Spis treĈci
Wstöp .............................................................................................. 7
CzöĈè I Wprowadzenie do Windows Communication Foundation ... 11
Rozdziaä 1. E = A + B + C = WCF ..................................................................... 13
Adres .............................................................................................................................. 13
Wiązanie ......................................................................................................................... 14
Kontrakt .......................................................................................................................... 17
Punkt koĔcowy ............................................................................................................... 18
Warto zapamiĊtaü ........................................................................................................... 18
Rozdziaä 2. Definiowanie kontraktu usäugi ......................................................... 19
Warto zapamiĊtaü ........................................................................................................... 30
Podsumowanie ................................................................................................................ 31
Rozdziaä 3. Hostowanie usäugi .......................................................................... 33
Self hosting ..................................................................................................................... 33
Serwis Windows ............................................................................................................. 41
IIS/WAS ......................................................................................................................... 47
Wady i zalety .................................................................................................................. 58
Warto zapamiĊtaü ........................................................................................................... 58
Podsumowanie ................................................................................................................ 58
Rozdziaä 4. Tworzenie klienta ........................................................................... 59
Channel Factory ............................................................................................................. 59
Service Reference ........................................................................................................... 61
Wady i zalety .................................................................................................................. 67
Warto zapamiĊtaü ........................................................................................................... 67
Podsumowanie ................................................................................................................ 67
CzöĈè II Konfiguracja usäug sieciowych ...................................... 69
Rozdziaä 5. Podstawowa konfiguracja ............................................................... 71
Wspólna konfiguracja ..................................................................................................... 71
Konfiguracja serwisu ...................................................................................................... 82
Konfiguracja klienta ....................................................................................................... 85
Warto zapamiĊtaü ........................................................................................................... 87
Podsumowanie ................................................................................................................ 88
4
WCF od podstaw. Komunikacja sieciowa nowej generacji
Rozdziaä 6. Zaawansowane aspekty konfiguracji ............................................... 89
behaviors .................................................................................................................... 89
Rozszerzenia, czyli extensions ................................................................................... 90
Podsumowanie ................................................................................................................ 96
CzöĈè III NowoĈci WCF 4.0 ......................................................... 97
Rozdziaä 7. Simplified Configuration .................................................................. 99
Warto zapamiĊtaü ......................................................................................................... 103
Podsumowanie .............................................................................................................. 103
Rozdziaä 8. Routing service ............................................................................ 105
Prosty routing ............................................................................................................... 108
Most .............................................................................................................................. 113
Lista backupowa ........................................................................................................... 116
Broadcast ...................................................................................................................... 121
Wáasny filtr ................................................................................................................... 125
Podsumowanie .............................................................................................................. 128
Rozdziaä 9. Service discovery ......................................................................... 129
Poáączenia bezpoĞrednie ............................................................................................... 133
Poáączenia przez proxy ................................................................................................. 137
Podsumowanie .............................................................................................................. 143
Rozdziaä 10. Workflow w WCF .......................................................................... 145
Projekt usáugi ................................................................................................................ 146
Korzystanie z referencji ................................................................................................ 154
Debugowanie ................................................................................................................ 158
Podsumowanie .............................................................................................................. 159
CzöĈè IV Narzödzia ................................................................... 161
Rozdziaä 11. Visual Studio ................................................................................ 163
Rozdziaä 12. WCF Service Host ........................................................................ 171
Rozdziaä 13. WCF Test Client ........................................................................... 175
Rozdziaä 14. SVC Util ....................................................................................... 181
Rozdziaä 15. Microsoft Service Configuration Editor .......................................... 187
Podsumowanie .............................................................................................................. 191
CzöĈè V Wykorzystanie WCF .................................................... 193
Rozdziaä 16. Callback contract ........................................................................ 195
Podsumowanie .............................................................................................................. 199
Rozdziaä 17. OData i WCF ................................................................................ 201
Model Entity Framework .............................................................................................. 201
Dowolna kolekcja ......................................................................................................... 209
Klient ............................................................................................................................ 211
Podsumowanie .............................................................................................................. 216
Spis treĈci
5
Rozdziaä 18. WCF RIA Services ........................................................................ 217
WCF + RIA .................................................................................................................. 217
Walidacja ...................................................................................................................... 224
Podsumowanie .............................................................................................................. 226
Rozdziaä 19. WydajnoĈè ................................................................................... 227
Porównanie wydajnoĞci wiązaĔ .................................................................................... 227
Wybór kodowania ........................................................................................................ 234
Monitorowanie ............................................................................................................. 241
Podsumowanie .............................................................................................................. 243
Podsumowanie ............................................................................. 245
Skorowidz .................................................................................... 247
6
WCF od podstaw. Komunikacja sieciowa nowej generacji
Rozdziaä 4.
Tworzenie klienta
Trzecim elementem, którym zajmiemy siĊ w tej czĊĞci ksiąĪki, jest tworzenie klienta
dla naszych usáug. RolĊ tĊ peániáo do tej pory narzĊdzie WCF Test Client, jednakĪe
oczywiste jest, Īe nie moĪe ono realizowaü zadaĔ biznesowych stawianych przed sys-
temem, poniewaĪ sáuĪy tylko do testów. Dziaáanie usáug bez elementu, który by siĊ do
nich odwoáywaá, mija siĊ z celem, dlatego moĪna pokusiü siĊ o stwierdzenie, Īe aplikacje
klienckie są równoprawną czĊĞcią wzorca projektowego Service Oriented Architecture.
Czym wáaĞciwie jest klient usáugi? OczywiĞcie, najczĊĞciej jest to aplikacja, która pre-
zentuje dane uĪytkownikowi koĔcowemu. Równie popularnym klientem moĪe byü pro-
ces dziaáający w naszym systemie, a takĪe odpowiedzialny za cykliczne wywoáywanie
odpowiednich procesów i zadaĔ biznesowych udostĊpnianych przez nasze usáugi.
Klientem moĪe byü równieĪ inna usáuga — mamy wówczas do czynienia z wielowar-
stwową architekturą, w której usáugodawca jest teĪ usáugobiorcą. W tym rozdziale
przeĞledzimy proces tworzenia klienta oraz zastanowimy siĊ nad róĪnymi sposobami
podejĞcia do tego zagadnienia.
Channel Factory
Pierwszym sposobem tworzenia klienta, jakim siĊ zajmiemy, jest wykorzystanie
ChannelFactory T . Klasa ta jest w stanie wygenerowaü odpowiednie proxy do poáą-
czenia z serwisem, jednakĪe ma pewne ograniczenie. Jest nim koniecznoĞü posiadania
przez klienta definicji klas opisujących kontrakt usáugi. W tworzonym przez nas pro-
jekcie taki dostĊp jest zapewniony, zatem moĪemy pokusiü siĊ o przetestowanie tego
sposobu. W związku z tym do solucji dodamy nowy projekt o nazwie PersonalInfor-
mationClients.ChannelFactoryClient; skorzystamy z szablonu aplikacji konsolowej, co
widaü na rysunku 4.1.
Klasa ChannelFactory znajduje siĊ w przestrzeni nazw System.ServiceModel, zatem do
projektu doáączamy taką wáaĞnie referencjĊ. JednoczeĞnie musimy równieĪ umoĪliwiü
aplikacji klienckiej dostĊp do definicji kontraktu usáugi, co wymaga dodania referencji
do projektu PersonalInformationService. Hostem, do którego bĊdziemy siĊ podáączaü,
60
CzöĈè I i Wprowadzenie do Windows Communication Foundation
Rysunek 4.1. Nowy projekt klienta oparty na aplikacji konsolowej
bĊdzie PersonalInformationHosts.WebHost. MoĪna teĪ skorzystaü z pozostaáych pro-
jektów hostujących usáugĊ, jednakĪe ten jest uruchamiany domyĞlnie przy starcie procesu
debugowania tworzonego przez nas klienta, zatem nie bĊdzie trzeba pamiĊtaü o wystar-
towaniu hosta. Dlaczego tak siĊ dzieje? Visual Studio, w momencie gdy rozpoczynane
jest debugowanie, przegląda solucjĊ w poszukiwaniu projektów, które bazują na ser-
werze WWW, a nastĊpnie uruchamia je za pomocą wbudowanego serwera WWW, co
widaü w pasku zadaĔ obok zegara. W naszym przypadku dotyczyü to bĊdzie projektu
PersonalInformationHosts.WebHost.
Korzystanie z ChannelFactory jest stosunkowo proste. Jednym z konstruktorów, któ-
rych moĪemy uĪyü, jest konstruktor przyjmujący dwa parametry: typ wiązania oraz
adres punktu koĔcowego. Aby zainicjowaü te wartoĞci w poprawny sposób, musimy
odwoáaü siĊ do pliku konfiguracyjnego usáugi. Widoczny na listingu 3.18 plik konfi-
guracyjny zawiera informacje o tym, Īe usáuga jest dostĊpna poprzez wiązanie WsHttp
´Binding. Adres, na jakim jest dostĊpna, to http://localhost:9000/PersonalInformation
Service.svc. W związku z tym w celu uruchomienia klienta moĪemy uĪyü kodu widocz-
nego na listingu 4.1. Kod ten na podstawie znanego nam interfejsu (w tym przypadku
jest to IPersonalInformationService) tworzy obiekt fabryki (ChannelFactory), który
inicjuje kanaá komunikacji z serwisem. Tak utworzone proxy daje nastĊpnie moĪliwoĞü
wywoáywania potrzebnych metod udostĊpnianych przez serwis. OczywiĞcie, jest to model
w peáni obiektowy, dziĊki czemu korzystanie z serwisów jest intuicyjne i wygodne.
Listing 4.1. Wykorzystanie ChannelFactory
Uri baseAddr = new Uri( http://localhost:9000/PersonalInformationService.svc/ );
ChannelFactory IPersonalInformationService factory =
Rozdziaä 4. i Tworzenie klienta
61
new ChannelFactory IPersonalInformationService (new WSHttpBinding(),
´new EndpointAddress(baseAddr));
IPersonalInformationService proxy = factory.CreateChannel();
var response = proxy.GetPersonalInformation(
new PersonalInformationService.Messages.PersonalInformationRequest()
{
PersonId = 1
});
Po uruchomieniu tak przygotowanego kodu otrzymujemy wynik widoczny na rysunku 4.2.
Rysunek 4.2. Wynik wywoáania klienta opartego na ChannelFactory
Service Reference
Wykorzystanie ChannelFactory do generowania klienta ma jedną wadĊ: podczas two-
rzenia projektu niezbĊdne jest posiadanie biblioteki zawierającej kontrakt. Taka sytu-
acja z przyczyn oczywistych nie zawsze jest moĪliwa. WyobraĨmy sobie, Īe rozwaĪany
przez nas serwis jest udostĊpniany przez firmĊ trzecią na jej serwerach. W takim przy-
padku nie ma szansy na uzyskanie dostĊpu do bibliotek opisujących kontrakty usáug,
a nawet jeĪeli taki dostĊp jest moĪliwy, to z duĪymi trudnoĞciami. W związku z tym
istnieje druga moĪliwoĞü utworzenia klienta. Polega ona na skorzystaniu z wbudowanych
w Visual Studio narzĊdzi, które generują klasy niezbĊdne do komunikacji z usáugą na
podstawie metadanych. Podobnie jak poprzednio, do solucji dodamy nowy projekt
bĊdący aplikacją konsolową, który posáuĪy do utworzenia klienta w bardziej elastyczny
sposób. Nowy projekt nazwiemy PersonalInformationClients.ServiceReferenceClient.
Aby moĪna byáo odwoáaü siĊ do usáugi, dodajemy do niej referencjĊ, wybierając w menu
kontekstowym projektu opcjĊ Add Service Reference…, tak jak widaü to na rysunku 4.3.
Po jej wybraniu pojawi siĊ okno widoczne na rysunku 4.4.
W tym momencie mamy dwie moĪliwoĞci. Pierwsza z nich polega na uĪyciu przycisku
Discover, który powoduje przeanalizowanie solucji w poszukiwaniu zdefiniowanych
serwisów. Podobnie jak w przypadku ChannelFactory, potrzebny jest kod Ĩródáowego
usáugi, a takiej sytuacji nie rozwaĪamy. W związku z tym posáuĪymy siĊ drugą opcją,
która polega na podaniu znanego nam adresu usáugi (http://localhost:9000/Personal
InformationService.svc), a nastĊpnie wciĞniĊciu przycisku Go. W tym momencie zostaje
nawiązane poáączenie z usáugą oraz pobranie informacji na jej temat poprzez zdefinio-
wany po stronie serwisu punkt koĔcowy MEX. Po przetworzeniu tych danych zostają
wyĞwietlone struktura usáugi oraz oferowane przez nią kontrakty i metody. Warto
62
CzöĈè I i Wprowadzenie do Windows Communication Foundation
Rysunek 4.3.
Opcja dodawania
referencji do usáugi
Rysunek 4.4. Okno dodawania referencji
jeszcze wspomnieü, Īe bez dostĊpnego punktu koĔcowego odpowiedzialnego za meta-
dane metoda ta nie moĪe zostaü zastosowana. W wielu sytuacjach stosuje siĊ wrĊcz
polityki bezpieczeĔstwa nakazujące usuwanie na serwerach produkcyjnych punktów
koĔcowych tego typu, co w pewnym stopniu umoĪliwia dodatkowe ich zabezpieczenie
przed utworzeniem „niechcianych” aplikacji klienckich. Przed zatwierdzeniem doda-
wania referencji warto równieĪ zmieniü domyĞlną przestrzeĔ nazw, którą jest Service
´Reference1, na bardziej znaczącą, np. PersonalInformationServiceReference. W wyniku
tej operacji do projektu jest dodawany nowy element widoczny na rysunku 4.5.
W pliku konfiguracyjnym app.config pojawiáy siĊ równieĪ wpisy potrzebne do nawią-
zania komunikacji z usáugą. Istotną w tym momencie czĊĞcią pliku jest sekcja client,
która zawiera informacje i konfiguracje punktów koĔcowych, które są zdefiniowane
w serwisie. Przykáadowa treĞü takiej sekcji widoczna jest na listingu 4.2.
Rozdziaä 4. i Tworzenie klienta
63
Rysunek 4.5.
Referencja do serwisu
dodana do projektu
Listing 4.2. Sekcja client w konfiguracji usáugi po stronie klienta
client
endpoint address= http://localhost:9000/PersonalInformationService.svc
binding= wsHttpBinding bindingConfiguration= WSHttpBinding_
´IPersonalInformationService
contract= PersonalInformationServiceReference.IPersonalInformationService
name= WSHttpBinding_IPersonalInformationService
/endpoint
/client
Teraz nic nie stoi na przeszkodzie, aby odwoáaü siĊ do usáugi. W tym celu korzystamy
z kodu widocznego na listingu 4.3.
Listing 4.3. Korzystanie z referencji do serwisu
using (PersonalInformationServiceClient client = new
PersonalInformationServiceClient())
{
var response = client.GetPersonalInformation(
new PersonalInformationRequest()
{
PersonId = 1
});
Console.WriteLine( Received response );
foreach (var person in response.Persons)
{
Console.WriteLine( {0} : {1} {2} , person.Id, person.Name, person.Surname);
}
}
Klasą, która w tym przypadku sáuĪy do komunikacji, jest PersonalInformationService
´Client. Wykorzystanie jej wewnątrz klauzuli using daje pewnoĞü, Īe na koniec pracy
z usáugą nawiązane poáączenie zostanie poprawnie zamkniĊte. Wynik dziaáania aplikacji
klienckiej jest w tym momencie dokáadnie taki sam jak na rysunku 4.2, zmienia siĊ
tylko sposób dziaáania, a nie sposób prezentacji wyników.
Gdy okreĞlono wiĊcej niĪ jeden punkt koĔcowy usáugi, z której bĊdziemy korzystaü,
naleĪy podaü jego nazwĊ jako parametr konstruktora klasy klienta. Inaczej próba urucho-
mienia tworzonego projektu skoĔczy siĊ komunikatem o báĊdzie dziaáania widocznym
na rysunku 4.6.
Aby wygenerowaü taki báąd, wystarczy dodaü do serwisu nowy punkt koĔcowy widoczny
na listingu 4.4, a do konfiguracji klienta doáączyü zawartoĞü listingu 4.5.
64
CzöĈè I i Wprowadzenie do Windows Communication Foundation
Rysunek 4.6.
Báąd niezdefiniowanej
nazwy konfiguracji
punktu koĔcowego
Listing 4.4. Dodatkowy punkt koĔcowy po stronie serwera usáugi
endpoint address= basic binding= basicHttpBinding contract=
´ PersonalInformationService.ServiceContracts.IPersonalInformationService /
Listing 4.5. Dodatkowy punkt koĔcowy po stronie klienta usáugi
endpoint address= http://localhost:9000/PersonalInformationService.svc/basic
´binding= basicHttpBinding contract= PersonalInformationServiceReference.
´IPersonalInformationService name= BasicHttpBinding_IPersonalInformationService
´ /endpoint
Aby po takich modyfikacjach poprawnie uruchomiü klienta usáugi, naleĪy w konstruk-
torze wygenerowanej klasy PersonalInformationServiceClient podaü nazwĊ konfigu-
racji, z której bĊdziemy korzystaü. W tym przypadku mamy dwie moĪliwoĞci: WSHttp
´Binding_IPersonalInformationService lub BasicHttpBinding_IPersonalInformation
´Service. Po zastąpieniu konstruktora bezparametrowego wywoáaniem widocznym
na listingu 4.6 uzyskujemy poprawne dziaáanie aplikacji klienckiej.
Listing 4.6. Konstruktor proxy wykorzystujący parametr nazwy konfiguracji punktu koĔcowego
new PersonalInformationServiceClient( BasicHttpBinding_
´IPersonalInformationService )
Wywoäania asynchroniczne
Kolejną zaletą zaprezentowanego podejĞcia do tworzenia klienta jest fakt, Īe w prosty
sposób generowane proxy moĪe równieĪ udostĊpniü asynchroniczne wywoáania metod
usáugi. DziĊki nim nie bĊdzie koniecznoĞci blokowania interfejsu uĪytkownika, czy teĪ
gáównego wątku aplikacji, do czasu otrzymania odpowiedzi z serwisu. W celu zaprezen-
towania wywoáaĔ asynchronicznych utworzymy nowy projekt aplikacji konsolowej
o nazwie PersonalInformationClients.AsyncClient. Podobnie jak poprzednio, dodajemy
referencjĊ do serwisu, jednakĪe w oknie widocznym na rysunku 4.4 wybieramy opcjĊ
Advanced. W rezultacie otwiera siĊ kolejne okno dialogowe widoczne na rysunku 4.7.
Rozdziaä 4. i Tworzenie klienta
65
Rysunek 4.7. Okno zaawansowanych ustawieĔ referencji do serwisu
Istotna jest tu opcja Generate asynchronous operations. DziĊki niej tworzone automa-
tycznie klasy bĊdą zawieraü równieĪ logikĊ niezbĊdną do asynchronicznego wywoáywa-
nia metod usáugi. Po jej zaznaczeniu i zatwierdzeniu wyboru w projekcie, podobnie jak
poprzednio, pojawiają siĊ nowe elementy odpowiedzialne za komunikacjĊ z usáugą.
Po takim utworzeniu i skonfigurowaniu proxy kaĪda z metod oferowanych przez serwis
posiada równieĪ swój odpowiednik z postfiksem Async oraz zdarzenie *Completed,
gdzie gwiazdka oznacza nazwĊ metody, która naleĪy do kontraktu. Zdarzenie to pozwala
na wpiĊcie siĊ w moment, gdy aplikacja kliencka otrzyma odpowiedĨ od serwisu w celu
jej dalszego przetworzenia. W związku z tym przed wywoáaniem odpowiedniej metody
musimy dodaü równieĪ obsáugĊ takiego zdarzenia. Peány kod asynchronicznego odwo-
áania do serwisu prezentujĊ na listingu 4.7.
Listing 4.7. Asynchroniczne wywoáanie metody udostĊpnionej przez serwis
Console.WriteLine( Press [ENTER] to call PersonalInformationService );
Console.ReadLine();
using (PersonalInformationServiceClient client = new PersonalInformationService
´Client( BasicHttpBinding_IPersonalInformationService ))
{
client.GetPersonalInformationCompleted += new EventHandler
´ GetPersonalInformationCompletedEventArgs
´(client_GetPersonalInformationCompleted);
66
CzöĈè I i Wprowadzenie do Windows Communication Foundation
client.GetPersonalInformationAsync(
new PersonalInformationRequest()
{
PersonId = 1
});
}
Console.WriteLine( Press [ENTER] to close client );
Console.ReadLine();
W przypadku komunikacji dwukierunkowej (pytanie — odpowiedĨ, ang. request — reply)
niezbĊdne moĪe okazaü siĊ teĪ przetworzenie odpowiedzi otrzymanej od serwisu. W tym
celu naleĪy odpowiednio obsáuĪyü dane dostĊpne w metodzie podpiĊtej pod zdarzenie
Completed. NiezbĊdny do tego kod widoczny jest na listingu 4.8.
Listing 4.8. Obsáuga odebranej asynchronicznie odpowiedzi
static void client_GetPersonalInformationCompleted(object sender,
´GetPersonalInformationCompletedEventArgs e)
{
Console.WriteLine( Received response );
foreach (var person in e.Result.Persons)
{
Console.WriteLine( {0} : {1} {2} , person.Id, person.Name, person.Surname);
}
}
Aby uzyskaü dostĊp do danych zwracanych przez serwis, naleĪy odwoáaü siĊ do argu-
mentu e oraz jego pola Result, które przechowuje wartoĞü odpowiedniego typu; w tym
przypadku bĊdzie to typ PersonalInformationResponse.
Uruchomienie tak przygotowanego kodu generuje wynik widoczny na rysunku 4.8.
Rysunek 4.8. Wynik dziaáania asynchronicznego klienta
Zgodnie z oczekiwaniem gáówny wątek programu nie zostaá zatrzymany na czas komu-
nikacji z serwisem i dotará do komunikatu koĔcowego. OdpowiedĨ, którą otrzymaá klient,
zostaáa przetworzona i wyĞwietlona dopiero na samym koĔcu. Z jednej strony, zapew-
nia to duĪo wiĊkszą responsywnoĞü interfejsu uĪytkownika, z drugiej jednak, wymaga
kilku dodatkowych zabiegów w celu poprawnego obsáuĪenia i dobrej prezentacji wyni-
ków komunikacji z usáugą.
Istnieje równieĪ moĪliwoĞü dodania referencji w sposób znany z wczeĞniejszych odsáon
.NET Framework, czyli jako referencji Web, jednakĪe daje ona duĪo mniejsze pole do
manewru w porównaniu z WCF. Jest to moĪliwe po wybraniu opcji Add Web Reference
widocznej na rysunku 4.7.
Rozdziaä 4. i Tworzenie klienta
Wady i zalety
67
Podstawową wadą ChannelFactory jest koniecznoĞü posiadania dostĊpu do skompi-
lowanej biblioteki zawierającej kontrakt usáugi. Powoduje to zmniejszenie elastycznoĞci
projektu w systemach opartych na wielu dostawcach. Problem ten znika w przypadku
wykorzystania referencji do serwisu. Dodatkową przewagą drugiego rozwiązania jest
áatwoĞü dodania metod asynchronicznych do komunikacji z usáugą.
Warto zapamiötaè
Gdy istnieje kilka punktów koĔcowych danej usáugi, w kodzie aplikacji klienckiej naleĪy
uĪyü konstruktora z parametrem bĊdącym nazwą punktu koĔcowego wybranego do
komunikacji.
Korzystanie z referencji do serwisu daje moĪliwoĞü prostego wygenerowania metod
asynchronicznych odwoáujących siĊ do usáugi.
Podsumowanie
W rozdziale zademonstrowaáem dwa sposoby korzystania z serwisów utworzonych przy
uĪyciu technologii WCF. W zaleĪnoĞci od konkretnego zastosowania mamy do wyboru
odmienne metody, które dają róĪne moĪliwoĞci. OczywiĞcie, nie są to jedyne metody,
bo istnieje moĪliwoĞü odwoáania do usáug bez koniecznoĞci dodawania jakichkolwiek
referencji od nich. MoĪemy odwoáaü siĊ do usáugi, korzystając z JavaScriptu lub odpo-
wiedniej konstrukcji adresu URL, jak ma to miejsce m.in. w przypadku standardu OData
i WCF Data Services. Temat ten podejmĊ jeszcze w czĊĞci piątej dotyczącej wyko-
rzystania WCF.
68
CzöĈè I i Wprowadzenie do Windows Communication Foundation
Skorowidz
A
Action, 27, 111, 119
Adobe Flash, 217
adres, 13, 18, 21, 36
bazowy, 21
modyfikacja, 39
okreĞlenie
pliki *.config, 13
System.Uri, 13
warstwy transportu, 14
wyĞwietlenie, 38
Adventure Works, 201
AdventureWorksDomainService,
AdventureWorksEntities, 204,
218
212
AJAX-enabled WCF Service, 167
algorithmSuite, 73
And, 111
AnnoumcementEndpoint, 139
app.config, 20, 28, 62, 95
domyĞlna zawartoĞü pliku, 21
architektura zorientowana na
usáugi, Patrz SOA
ASP.NET Empty Web
Application, 201
aspnet_regiis.exe, 57
AsQueryable, 211
AsyncPattern, 27
AsyncResult, 139
implementacja, 139
ATOM, 165
dane pobrane, 167
atrybuty kontraktu
parametry, 27
AZU, Patrz SOA
B
baseAddr, 39, 112
baseAddresses, 40
BasicHttpBinding, 15, 16
BasicHttpContextBinding, 15, 16
behavior, 90, 102
behaviorConfiguration, 107
BehaviorExtensionElement,
92, 93
behaviors, 89
clientBehaviors, 89
serviceBehaviors, 89
bindingConfiguration, 99
BindingElement, 95
bindings, 72, 94, Patrz takĪe
wiązania
parametry, 73
báĊdy, 72, 75
protokoáu komunikacji, 80
przekroczenia czasu
wywoáania Īądania, 76
zerwania poáączenia, 77
broadcast
definicja filtra, 123
definicja serwisu, 122
kod wywoáania serwisu, 124
kontrakt usáugi, 122
punkty koĔcowe, 123
schemat, 121
tablica routingu, 123
wynik dziaáania, 124
Buffered, 73
C
callback contract, 195
klasa implementująca, 198
komunikacja z usáugą, 198
treĞü, 197
uruchomienie, 197
wynik dziaáania
hosta, 199
klienta, 199
zastosowanie, 197
CallbackContract, 27
ChannelFactory, 59, 67, 109
wynik wywoáania klienta, 61
client, 85
clientBehaviors, 89
clientCredentialType, 73
CodeBehind, 51
COM+, 7
config, 13, 71, 90
ConfigurationManager, 86
ConfigurationName, 27
Console Application, 33
contract, Patrz kontrakt
CreateFeed, 165
Custom, 111
CustomBinding, 17, 95
D
DataContract, 23, 26, 30
DataGrid, 213, 220
DataMember, 23, 30
DataServiceCollection, 213
DCOM, 7
DiscoveryClient, 133, 134
DiscoveryEndpoint, 139
DiscoveryProxy, 137
DisplayName, 44
DTO, 24
duplex, 195
E
echo, 108
definicja, 108
implementacja, 108
248
WCF od podstaw. Komunikacja sieciowa nowej generacji
echo
kod hosta, 108
kod klienta, 109
wynik dziaáania, 110
EmitDefaultValue, 27
endpoint, Patrz punkt koĔcowy
EndpointAddress, 111
EndpointAddressPrefix, 111
EndpointName, 111
Entity Set Name, 205
EnumMember, 26, 30
Envelope, 119
extensions, 90, 93
F
filterData, 111, 125
filterTables, 111
filterType, 111
FindCompleted, 136
FindCriteria, 134
FindProgressChanged, 136
Flash, 217
G
GenderDto, 26
GetCallbackChannel, 197
GetPersonalInformation, 29
GreetingService, wywoáanie
usáugi, 117
H
Header, 119
hostowanie, 33
IIS, 47
samohostowanie, 33
serwis Windows, 41
uruchomienie, 46
usuniĊcie, 47
WAS, 47, 57
zatrzymanie, 46
HTTP, 7, 8
HttpBinding, 81
HttpGetEnabled, 37
I
IAsyncResult, 139
IBroadcastDemoService, 153
IDuplexSessionRouter, 106
IFeed, 165
IGreetingService, kontrakt, 117
IIS, 47
IIS Manager, 55
tworzenie nowej witryny, 55
InitializeService, 204
installutil, 44, 46
InstallUtil.InstallLog, 45
IPersonalInformationService, 24
IQueryable, 211
IRequestReplyRouter, 106
ISampleContractCallback, 198
IService, 23
IService1, domyĞlna zawartoĞü
IServiceBehavior, 90, 91
ISimplexDatagramRouter,
pliku, 21
106, 122
ISimplexSessionRouter, 106
IsInitiating, 27
IsOneWay, 27, 122
IsReference, 27
IsRequired, 27
IsTerminating, 27
jQuery, 214
JSON, 215
J
K
klient
projekt, 60
tworzenie, 59
kodowanie
binarne, 234
MTOM, 235
tekstowe, 235
wydajnoĞü, 234
komunikacja
dwukierunkowa, 196
jednokierunkowa, 195
poprzez HTTP, 7
poprzez TCP/IP, 7, 8
Īądanie-odpowiedĨ, 195
konfiguracja, 69
behaviors, 89
bindings, 72
parametry, 73
extensions, 90
klienta, 85
rozszerzenia, 90
serwisu, 82
uproszczona, Patrz simplified
configuration
wiadomoĞci, 78
wspólna, 71
zaawansowana, 89
kontrakt, 13, 17, 18, 21
definiowanie, 19
implementacja, 28
nazwy klas, 26
parametry atrybutów, 27
tworzenie projektu, 20
udostĊpnienie, 33
uruchomienie, 30
zawartoĞü projektu, 20
L
LINQ, 212
lista backupowa
báĊdy, 121
konfiguracja, 118
schemat dziaáania, 117
serwisy zapasowe, 119
wpis tablicy routingu, 119
wynik dziaáania, 120
LoadCompleted, 213
LocalService, 44
LocalSystem, 44
M
MatchAll, 111
maxArrayLength, 73
maxBufferPoolSize, 73
maxBufferSize, 73
maxBytesPerRead, 73
maxConcurrentCalls, 90
maxConcurrentInstances, 90
maxConcurrentSessions, 90
maxReceivedMessageSize, 73
maxStringContentLength, 73
MessageFilter, 125
MEX, 37, 43, 61, 100
Microsoft Service Configuration
Editor, 187
Contract Type Browser, 190
host, 188
konfiguracja, 187
narzĊdzie, 188
kontrakt, 190
punkt koĔcowy, 189
typy wiązaĔ, 189
Microsoft Transaction Server, 7
Skorowidz
249
Model Entity Framework, 201
odwracanie áaĔcucha znaków
aplikacja, 202
baza danych, 201
model danych, 202
zawartoĞü, 203
serwis
dodawanie, 203
uruchomienie, 204, 205
zapytanie, 206, 207, 208
monitorowanie wydajnoĞci, 241
liczniki, 242
most miĊdzy protokoáami
konfiguracja, 115
schemat, 113
wynik dziaáania, 116
MSMQ, 8
MsmqIntegrationBinding, 15, 17
MTOM, 235
serializator, 237
N
Name, 27
Namespace, 27
narzĊdzia, 161
Microsoft Service
Configuration Editor, 187
SVC Util, 181
Visual Studio, 163
WCF Service Host, 171
WCF Test Client, 175
NetMsmqBinding, 15, 17, 81
NetNamedPipeBinding, 15, 16
NetPeerTcpBinding, 15, 16
netsh, 38, 39
NetTcpBinding, 15, 16, 82, 100
NetTcpContextBinding, 15, 16
NetworkService, 44
nowoĞci WCF 4.0, 97
O
OData, 201
dowolna kolekcja, 209
klasy, 209, 210
serwis, 211
klient, 211
.NET, 214
jQuery, 214
Silverlight, 211
Model Entity Framework, 201
host usáugi, 114
implementacja usáugi, 114
kontrakt usáugi, 114
wywoáanie usáugi, 114
OnBeginFind, 138
OnBeginOfflineAnnouncement,
137
137
137
OnBeginOnlineAnnouncement,
OnBeginResolve, 138
OnEndFind, 138
OnEndOfflineAnnouncement,
OnEndOnlineAnnouncement, 137
OnEndResolve, 138
open/closeTimeout, 73
OperationContract, 22, 24, 30,
195
Order, 27
P
27
25
25, 66
parametry atrybutów kontraktu,
PersonalInformationRequest,
PersonalInformationResponse,
PersonalInformationService, 41,
51
wáaĞciwoĞci projektu, 23
zawartoĞü pliku, 50
PersonalInformationServiceClie
nt, 63, 64
PersonalServiceRequest, 149
PersonDto, 25
ProcessData, 122
ProductCategoryValidator, 224
Program.cs, 34, 38
ProjectInstaller, 43
prosty routing
báĊdy, 112
filtr, 110
typy, 111
sekcja kliencka, 110
tablica routingu, 111
wynik dziaáania, 113
ProtectionLevel, 27
przepáyw wiadomoĞci, 18
punkt koĔcowy, 13, 18, 21, 63, 83
domyĞlny, 99, 100
skáadowe, 18
R
readerQuotas, 73
maxArrayLength, 73
maxBytesPerRead, 73
maxStringContentLength, 73
receive/sendTimeout, 73
ReceiveRequest, 146
ReplyAction, 27
request-reply, 150, 195
RIA Services, 217
nowy serwis, 219
serwis domenowy, 219
walidacja, 224
wynik dziaáania aplikacji,
klasa, 224
222, 223
XAML, 220, 222
Ĩródáa danych, 220
routing, 111
routing service, 105, 128
broadcast, 121
konfiguracja, 107
lista backupowa, 116
most miĊdzy protokoáami, 113
prosty routing, 108
rozdzielanie wiadomoĞci, 105
schemat dziaáania, 105
uruchomienie, 106
RoutingService, 106
rozszerzenia, 90
RSS, 165
dane pobrane, 166
RunAdditionalHosts.bat, 153
RunHost, 38
RunInlineConfiguredHost, 36,
38, 43
S
samohostowanie, 33
SampleReferenceServiceLibra
ry, 157
SayHello, 119
security, 73
algorithmSuite, 73
clientCredentialType, 73
SendAndReceiveReply, 148, 150
SendResponse, 146
service discovery, 129
konfiguracja, 133
poáączenia bezpoĞrednie,
129, 133
punkt koĔcowy, 133
schemat, 130
250
WCF od podstaw. Komunikacja sieciowa nowej generacji
service discovery
poáączenia przez proxy,
129, 137
modyfikacja hostów, 140
modyfikacja klienta, 141
schemat, 131
uruchomienie proxy, 139
wynik dziaáania klienta, 142
wynik uruchomienia
proxy, 140
wyrejestrowanie usáugi, 142
Service Reference, 61, 67
dodawanie referencji, 62
ustawienia zaawansowane, 65
wywoáania asynchroniczne, 64
Service1, 23
serviceBehaviors, 89, 107
ServiceContract, 22, 24, 30, 149
ServiceHost, 33
serviceHostingEnvironment, 84
ServiceInstaller, 44
ServiceMetadataBehavior, 37
ServiceMetadataEndpoint, 37
ServiceModelReg.exe, 56
ServiceName, 44
ServiceProcessInstaller, 44
ServiceProxy, 182
services, 82
ServicesDependedOn, 44
serviceThrottling, 89, 96
parametry, 90
serwer IIS, 47
dziaáanie usáugi, 57
tworzenie nowej witryny, 56
serwis Windows, 41
serwis XML, 7, 8, 14
SessionMode, 27
SetEntitySetAccessRule, 204
Silverlight, 211, 217
wáączenie RIA Services, 218
Silverlight-enabled WCF
Service, 167
SimpleIntroduceService, 126
SimplePersonalInformationSer
vice, 27, 35
simplex, 195
simplified configuration, 36, 99
usáuga, 102
SOA, 7, 9, 11, 59
SOAP, 8, 118
standardEndpoints, 84
StartType, 44
Streamed, 73
StreamedRequest, 73
StreamedResponse, 73
svc, 48, 52
dziaáanie pliku, 52
SVC Util, 181
/async, 185
/config, 181
/language, 185
/mergeConfig, 185
/output, 181
przeáączniki, 181, 185
uruchomienie, 181
svcconfigeditor, 190
svcutil, 181
Syndication Service Library, 164
zawartoĞü wygenerowanej
aplikacji, 165
System.Runtime.Serialization, 12
System.ServiceModel, 11, 12,
23, 33
Channels, 17
Configuration, 12
Description, 12
IContractBehavior, 90
IEndpointBehavior, 90
IOperationBehavior, 90
IServiceBehavior, 90
Discovery, 132, 133, 137
Dispatcher, 125
DomainServices.Client, 220
MsmqIntegration, 12
Routing, 106
Security, 12
System.Uri, 13
szablon WCF Service
Application, 48, 51
szablon WEB, 48
T
TCP/IP, 7, 8
transferMode, 73
Buffered, 73
Streamed, 73
StreamedRequest, 73
StreamedResponse, 73
U
UdpAnnouncementEndpoint, 140
UdpDiscoveryEndpoint, 140
User, 44
V
Visual Studio, 163
darmowa wersja, 10
Syndication Service
Library, 164
WCF Service Application, 164
WCF Service Library, 164
WCF Workflow Service
Application, 164
zestaw projektów, 163
W
warstwy transportu, 14
WAS, 47, 57
WCF
kompatybilnoĞü, 8
nowoĞci w wersji 4.0, 97
przykáady wykorzystania, 193
WCF Data Service, 167, 201
WCF Service, 167
WCF Service Application, 48,
51, 164
zawartoĞü wygenerowanej
aplikacji, 164
WCF Service Host, 171
ikona, 172
konfiguracja argumentów, 173
okno z uruchomionym
serwisem, 172
parametry uruchomienia, 172
wáaĞciwoĞci projektu, 171
WCF Service Library, 20, 164
zawartoĞü wygenerowanej
aplikacji, 164
WCF Test Client, 175
dodanie testowanej usáugi, 175
konfiguracja, 178
okno, 176
plik konfiguracyjny, 179
przegląd wiadomoĞci XML,
178
uruchomienie, 175
wywoáanie metod
tablice obiektów, 178
typy proste, 177
typy záoĪone, 177
WCF Workflow Service
Application, 146, 164
zawartoĞü wygenerowanej
aplikacji, 164
wcftestclient, 35, 38, 52, 175
Skorowidz
251
WEB, 48
Web Services, Patrz serwis XML
web.config, 50
WebHttpBinding, 15, 16
WebMethod, Patrz
OperationContract
WebService, Patrz
ServiceContract
wiadomoĞü
przepáyw, 18
wiązania, 13, 14, 18, 21
domyĞlne, 99
oparte na HTTP, 16
oparte na MSMQ, 17
oparte na TCP, 16
schemat wyboru, 234
wydajnoĞü, 227
Windows
serwis, 41
Windows Workflow
Foundation, 145
wáasny filtr
definicja, 126
host usáugi, 126
implementacja, 125
kontrakt, 126
reguáy, 126
wynik dziaáania, 128
workflow, 145, 158
debugowanie, 158
okno zmiennych, 150
parametr wywoáania, 149
projekt usáugi, 146
przykáad uĪycia, 146
puáapka debugowania, 158
referencje, 154, 156
sekwencja poáączenia z
usáugą, 148
szablon, 146
wartoĞü odpowiedzi, 151, 152
wygląd procesu
biznesowego, 155
wynik, 149
wywoáanie usáugi, 147
Īądanie, 149
WorkflowServiceHost, 159
WS-Discovery, 129
specyfikacja, 129
WSDualHttpBinding, 15, 16
WSFederationHttpBinding, 15, 16
WSHttpBinding, 15, 16
WSHttpContextBinding, 15, 16
wydajnoĞü, 227
kodowania, 234
zestawienie, 240
monitorowanie, 241
liczniki, 242
wiązaĔ, 227
schemat wyboru, 234
zestawienie, 234
wywoáania asynchroniczne, 64
wynik dziaáania, 66
X
XML
serwis, 7, 8, 14
XmlSerializer, 240
XPath, 111, 118
248
WCF od podstaw. Komunikacja sieciowa nowej generacji
Pobierz darmowy fragment (pdf)