Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00445 006737 14291312 na godz. na dobę w sumie
WCF od podstaw. Komunikacja sieciowa nowej generacji - książka
WCF od podstaw. Komunikacja sieciowa nowej generacji - książka
Autor: Liczba stron: 252
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-3094-3 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> sieci komputerowe >> inne
Porównaj ceny (książka, ebook, audiobook).

Poznaj i wykorzystaj przyszłość komunikacji internetowej!

Windows Communication Foundation to technologia umożliwiająca komunikację pomiędzy praktycznie wszystkimi systemami wymiany danych, przeznaczona przede wszystkim dla tych użytkowników, których główną potrzebą jest zachowanie dużej elastyczności usług sieciowych. Technologia ta jest nadrzędna wobec wszystkich wcześniejszych rozwiązań Microsoftu w tej dziedzinie, zapewnia zgodność z innymi standardami, pozwala też używać różnych protokołów (m.in. HTTP, TCP) bez konieczności ingerowania w sam kod aplikacji. Jeśli chcesz uniknąć problemów związanych z koniecznością ciągłego dostosowywania się do wymagań klientów bądź współpracowników używających różnych kanałów komunikacji sieciowej, pora zapoznać się z możliwościami oferowanymi przez technologię WCF.

Książka 'WCF od podstaw. Komunikacja sieciowa nowej generacji' składa się z pięciu części zawierających najważniejsze zagadnienia związane z technologią WCF. Znajdziesz w niej informacje na temat samej technologii i jej elementów oraz poczytasz o rozmaitych aspektach i wariantach konfiguracji. Dowiesz się, jakie nowości oferuje WCF 4.0, a także poznasz narzędzia używane podczas pracy z tą technologią, w tym Visual Studio, WCF Service Host i WCF Test Client. Ostatnim, choć wcale nie najmniej ważnym omówionym obszarem będzie kwestia wykorzystania serwisów WCF w kontekście standardu OData, biblioteki jQuery i aplikacji Silverlight. Lektura tej pozycji uświadomi Ci, jak wiele tracisz, nie używając na co dzień technologii WCF, a przede wszystkim, jak wiele możesz zyskać!

Twórz przejrzysty kod, wykorzystując nowoczesne, elastyczne i wygodne w użyciu rozwiązanie WCF!

Znajdź podobne książki Ostatnio czytane w tej kategorii

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)

Gdzie kupić całą publikację:

WCF od podstaw. Komunikacja sieciowa nowej generacji
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: