r17-t.doc

(412 KB) Pobierz
Szablon dla tlumaczy

Rozdział 17.
Wykorzystanie i zabezpieczanie serwisów sieci WWW

W poprzednim rozdziale podane zostały wszystkie informacje konieczne do tworzenia serwisów sieci WWW — czym one są, dlaczego warto ich używać oraz jak należy je tworzyć. Także ten rozdział będzie poświęcony serwisom sieci WWW, lecz skoncentrujemy się w nim na sposobach wykorzystania serwisów za pośrednictwem stron ASP.NET.

W tym rozdziale zostaną omówione następujące zagadnienia:

·         W jaki sposób korzystać z procesu odkrywania w celu zdobycia informacji o istniejących serwisach sieci WWW.

·         Jak można generować klasy pośredniczące, zapewniające dostęp do serwisów.

·         Jak implementować klasy pośredniczące na stronach ASP.NET.

·         W jaki sposób można zabezpieczać serwisy przy użyciu nagłówków SOAP.

Wykorzystanie serwisów sieci WWW

W poprzednim rozdziale dowiedziałeś się w jaki sposób można używać serwisów sieci WWW do tworzenia usług, z których można korzystać za pośrednictwem Internetu. Na przykład, witryna może udostępniać pewien zbiór funkcji realizujących obliczenia finansowe. Kiedy taki serwis zostanie opracowany i udostępniony na witrynie, każdy będzie mógł ją odwiedzić i skorzystać z oferowanych możliwości funkcjonalnych.

Nowe określenie

Załóżmy, że twórca internetowej aplikacji bankowej chciałby wykorzystać dostępny serwis obliczeń finansowych, aby wykonać interesujące go kalkulacje dotyczące CD-ROM-ów. A zatem, tworzona przez niego aplikacja bankowa musi wykorzystać (innymi słowy — uzyskać dostęp i użyć) metody tego serwisu. Wykorzystanie serwisu sieci WWW oznacza po prostu użycie udostępnianych przez niego możliwości przez klienta. Użytkownicy witryny bankowej mogą używać funkcji kalkulatora nie wiedząc nawet kto je wykonuje.

Gdy odwiedzasz stację benzynową, jej obsługa świadczy Ci określone usługi. Korzystając z tych usług stajesz się automatycznie ich konsumentem. Możesz wykorzystać wszelkie usługi i zasoby udostępniane przez stację benzynową — dystrybutory paliwa, czas i pracę zatrudnionych na niej osób oraz wszelkie inne dobra, które można na niej kupić. (Oczywiście za usługi te trzeba zapłacić, jednak naszym przypadku nie ma to na razie znaczenia.) Wykorzystanie usług świadczonych przez stację benzynową umożliwia Ci uniknięcie konieczności posiadania własnego dystrybutora paliwa oraz naprawy i konserwacji samochodu.

Klienci korzystający z serwisów sieci WWW robią dokładnie to samo. Odwiedzają serwis i korzystają z zasobów, które udostępnia. Na przykład, Twój komputer mógłby korzystać z serwisu realizującego przetwarzanie tekstów. W takim przypadku, wszystkie jego możliwości funkcjonalne byłyby dla Ciebie dostępne, co oznacza, że nie musiałbyś kupować, ani instalować edytora tekstów.

Klientami używającymi serwisów sieci WWW mogą być niemal wszystkie aplikacje — komputery, strony ASP.NET lub nawet urządzenia przenośne, takie jak telefony komórkowe! W tym rozdziale skoncentrujemy się na zagadnieniach związanych z wykorzystaniem serwisów sieci WWW z poziomu stron ASP.NET.

Proces wykorzystania serwisu sieci WWW składa się z trzech etapów:

  1. Zdobycia informacji o serwisie poprzez wykorzystanie mechanizmów odkrywania.
  2. Stworzenia klasy pośredniczącej w dostępie do serwisu.
  3. Użycia klasy pośredniczącej do wywoływania metod udostępnianych przez serwis.

 

Ostrzeżenie
Nie należy mylić klienta serwisu sieci WWW z klientem internetowym. Pierwszy z nich to aplikacja lub witryna WWW wykorzystująca usługi udostępniane przez serwis sieci WWW. Klientem internetowym nazywamy natomiast program służący do przeglądania zasobów Internetu — na przykład, przeglądarkę WWW. Klient serwisów sieci WWW korzysta z możliwości udostępnianych przez te serwisy, natomiast klient internetowy — z witryn WWW. Oba te klienty mają ze sobą bardzo niewiele wspólnego i zanim zaczniesz tworzyć klientów serwisów sieci WWW, powinieneś dobrze zrozumieć tę różnicę.

Zapewne przypominasz sobie, że odkrywanie jest procesem umożliwiającym klientom zdobywanie informacji o serwisach sieci WWW. Idąc do nowej restauracji, pierwszą rzeczą jaką robimy, jest przeglądnięcie menu i sprawdzenie jakie potrawy można zamówić. W ten sam sposób postępują programy korzystające z serwisów sieci WWW — zanim będą w stanie wykorzystać możliwości serwisu, muszą je określić.

Informacje te są dostępne jako opis serwisu sieci WWW (więcej na jego temat znajdziesz w poprzednim rozdziale). Przypominasz sobie zapewne, że opis ten jest plikiem XML wygenerowanym przez sam serwis. Klient używa tego pliku do określenia możliwości serwisu; można by rzecz, że analizując go czyta menu udostępnianych możliwości funkcjonalnych. Klient może także stworzyć własną kopię tego „menu”, która może mu się przydać w przyszłości.

Czy przypominasz sobie pliki .disco o których była mowa w poprzednim rozdziale? Są one tworzone wyłącznie po to, aby pomagać klientom serwisów sieci WWW. Pliki te zawierają połączenia z opisami serwisów sieci WWW udostępnianymi na serwerze, które z kolei pozwalają klientom na zdobycie informacji o sposobach wykorzystania serwisów. Warto zauważyć, iż klienty wcale nie muszą korzystać z plików .disco — jeśli znają adres opisu serwisu, mogą odwołać się bezpośrednie do niego.

Ciekawym etapem wykorzystania serwisów sieci WWW jest generacja klasy pośredniczącej. Oto analogia, która przedstawia przeznaczenie takiej klasy. Załóżmy, że chciałbyś pojechać do restauracji, ale nie masz ważnego prawa jazdy. Udaje Ci się jednak przekonać swoją matkę, aby zawiozła Cię do restauracji własnym samochodem. Można powiedzieć, że matka działa na Twoją rzecz, zawożąc Cię tam, gdzie samemu nie byłbyś w stanie się dostać. Innymi słowy, Twoja matka staje się pośrednikiem pomiędzy Tobą a restauracją.

W podobny sposób działają klienty używające serwisów sieci WWW. Wiedzą one, że gdzieś jest dostępny serwis, jednak nie mogą samodzielnie skorzystać z jego możliwości. Takie klienty potrzebują pomocy pośrednika, który będzie w stanie udostępnić im mechanizmy przesyłania danych do i z serwisu sieci WWW.

Wykorzystując serwis sieci WWW z poziomu stron ASP.NET, chcemy aby użycie jego możliwości było możliwie jak najprostsze. Nie chcemy zawracać sobie głowy przesyłaniem komunikatów XML, konwersją wykonywanych poleceń do odpowiedniego formatu ani pobieraniem zwracanych informacji. W optymalnym przypadku chcielibyśmy korzystać z serwisu sieci WWW jak gdyby było on obiektem biznesowym przechowywanym na lokalnym komputerze. A zatem chcielibyśmy, aby wykorzystanie serwisu sprowadziło się do utworzenia obiektu jakiejś klasy i posługiwania się jego metodami.

Właśnie do tego celu służy klasa pośrednicząca. Klasa ta znajduje się na komputerze użytkownika i zawiera wszystkie złożone mechanizmy konieczne do wymiany informacji z serwisem sieci WWW. Dzięki niej interakcja z serwisem może być realizowana w taki sam sposób jak wykorzystanie dowolnego innego obiektu. W rzeczywistości, klasa pośredniczące będzie zawierać metody i właściwości odpowiadające metodom i właściwościom udostępnianym przez serwis sieci WWW; nawet ich nazwy będą identyczne. A zatem, wiedząc jakie metody udostępnia serwis sieci WWW, będzie można wywołać odpowiednie metody klasy pośredniczącej. Proces wykorzystania klasy pośredniczącej został przedstawiony na rysunku 17.1.

 

Rysunek 17.1. Klasa pośrednicząca działa jako „warstwa pośrednia” pomiędzy klientem a serwisem sieci WWW

Opis rysunku

Client – Klient

ASP.NET page — Strona ASP.NET

Proxy class — Klasa pośrednicząca

Send XML — Wysyła dane XML

Receive data — Odbiera dane

Web Service — Serwis sieci WWW

 

Klasa pośrednicząca jest generowana na podstawie informacji zawartych w opisie serwisu sieci WWW. Analizując go, klasa jest w stanie zdobyć wszelkie konieczne informacje na temat sposobu przesyłania poleceń oraz zwracanych wyników. Więcej informacji na ten temat znajdziesz w dalszej części rozdziału, pt.: „Wykorzystanie serwisów sieci WWW w stronach ASP.NET”.

Klient korzystający z serwisu sieci WWW może użyć klasy pośredniczącej także do wywoływania metod serwisu. Czynności te niczym się nie różnią od sposobów wywoływania metod dowolnych obiektów. Cały ten proces jest całkowicie niewidoczny dla użytkownika, a jego implementacja nie powinna przysporzyć programistom żadnych trudności. Czynności związane z wykorzystaniem serwisu sieci WWW zostały przedstawione na rysunku 17.2.

 

Rysunek 17.2. Wykorzystania serwisu sieci WWW jest procesem składającym się z trzech etapów

Opis rysunku

Client — Klient

Web Service — Serwis sieci WWW

1. … — 1. Analiza opisu serwisu

2. … — 2. Generacja klasy pośredniczącej

3. … — 3. Wykorzystanie metod serwisu za pośrednictwem klasy pośredniczącej

Proxy — Klasa pośrednicząca

 

Notatka
Serwisy sieci WWW są najczęściej używane przez strony WWW oraz inne serwisy sieci WWW. Wykorzystywanie serwisów sieci WWW przez zwyczajne aplikacje także nie należy do rzadkości.

Wykorzystanie serwisów sieci WWW w stronach ASP.NET

Już raz byliśmy użytkownikami serwisu sieci WWW. Oglądając opis serwisu oraz stronę opisu (patrz poprzedni rozdział) wykonaliśmy te same czynności, które wykonuje klient serwisu. Jedyna różnica polega na tym, iż my wywoływaliśmy je bezpośrednio, a nie przy użyciu klasy pośredniczącej.

W kolejnych trzech podrozdziałach zostaną opisane sposoby realizacji trzech etapów wykorzystania serwisu sieci WWW (odkrycia, generacji klasy pośredniczącej oraz implementacji) na stronach ASP.NET; przy czym do komunikacji z serwisem użyty zostanie protokół SOAP. Realizacja pierwszych dwóch etapów, wymaga wykorzystania narzędzi uruchamianych z poziomu wiersza poleceń systemu. Natomiast dzięki użyciu klasy pośredniczącej, trzeci etap wykorzystania serwisu — implementacja — niczym się nie różni od korzystania z obiektów biznesowych.

Proces odkrywania serwisu

Proces odkrywania serwisów dostępnych na wskazanej witrynie WWW można wykonać przy użyciu programu disco.exe. Program ten przeszukuje witryny WWW i zwraca kopie plików .disco  dostępnych na danym serwerze. Te lokalne kopie plików .disco można następnie wykorzystać przy generacji klasy pośredniczącej.

Zobaczmy jak to wygląda w praktyce. Otwórz okno wiersza poleceń i przejdź do folderu c:\inetpub\wwwroot\aspnetdlakazdego\rozdzial17. Zakładam, że zgodnie z informacjami podanymi w poprzednim rozdziale stworzyłeś plik Calculator.disco i umieściłeś go w głównym folderze aplikacji aspnetdlakazdego. Jeśli tak, to w oknie wiersza poleceń wpisz następujące polecenie:

disco http://localhost/aspnetdlakazdego/rozdzial16/Calculator.disco

 

(Sposób użycia tego programu zostanie bardziej szczegółowo opisany w dalszej części tego rozdziału.) Program disco.exe wyświetla adresy URL plików .disco dostępnych na wskazanym serwerze (patrz rysunek 17.3).

 

Rysunek 17.3.              Wyniki wykonania programu disco.exe

 

Domyślnie program ten generuje także dwa pliki o nazwach results.discomap oraz services.disco. Pierwszy z nich — results.discomap — zawiera informacje o wynikach wykonania programu. Można w nim znaleźć dane o plikach .disco odnalezionych na serwerze, oraz o położeniu ich lokalnych kopii. Drugi plik — services.disco — zawiera te same informacje co odnaleziony plik .disco. Oba te pliki są zapisane w języku XML, dzięki czemu łatwo można je odczytać i przeanalizować. Typowa zawartość pliku services.disco została przedstawiona na rysunku 17.4.

 

Rysunek 17.4.              Plik XML services.disco wyświetlony w przeglądarce

 

Listing 17.1 przedstawia zawartość pliku results.discomap, w którym zostały zapisane szczegółowe informacje o wynikach realizacji procesu odkrywania.

 

Listing 17.1.              Zawartość pliku results.discomap

1           <?xml version="1.0" encoding="utf-8"?>

2           <DiscoveryClientResultsFile

3               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

4               xmlns:xsd="http://www.w3.org/2001/XMLSchema">

5             <Results>

6               <DiscoveryClientResult referenceType="System.Web.

7                  Services.Discovery.DiscoveryDocumentReference" 

8                  url="http://localhost/aspnetdlakazdego/rozdzial16/

9                  Calculator.disco" filename="Calculator.disco" />

10          </Results>

11        </DiscoveryClientResultsFile>

 

Analiza

Powyższy plik zawiera wyniki wykonania procesu odkrywania przeprowadzonego na podanym serwerze. Interesujący nas fragment tego pliku został zapisany wewnątrz znaczników Results. Użyty w wierszu 4. atrybut referenceType określa typ analizowanego pliku. W naszym przypadku jest to dokument procesu odkrywania. Atrybut url określa natomiast adres odnalezionego pliku .disco. Kolejny atrybut — filename — podaje nazwę lokalnej kopii pliku .disco. Plik ten może zostać wykorzystany później, podczas generacji klasy pośredniczącej.

W wywołaniu programu disco.exe można użyć 6 parametrów; zostały one opisane w tabeli 17.1.

 

Tabela 17.1.              Parametry wywołania programu disco.exe.

Parametr

Opis

/nologo

Zapobiega wyświetlaniu informacji o firmie Microsoft, generowanych przez ten program.

/nosave

Informuje, że wyniki wykonania procesu odkrywania nie powinny być zapisywane w pliku.

/out

Określa folder, w jakim mają zostać zapisane wyniki wykonania programu. Wartością domyślną tego parametru jest bieżący folder.

/username

Określa nazwę użytkownika jaką należy podać aby uzyskać dostęp do serwera.

/password

Określa hasło które zapewnia dostęp do serwera.

/domain

Określa nazwę domeny jakiej należy użyć by uzyskać dostęp do serwera.

 

Przedstawione poniżej przykładowe polecenie zapobiega wyświetlaniu informacji o firmie Microsoft i określa, że wyniki mają być zapisane w folderze c:\temp\disco:

disco /nologo /out:c:\temp\disco http://localhost/aspnetdlakazdego/Services.disco

 

Tworzenie klasy pośredniczącej

Zgodnie z tym co podałem wcześniej, klasa pośrednicząca pełni funkcję warstwy pośredniej pomiędzy serwisem sieci WWW a klientem który z tego serwisu chce skorzystać. Klasa ta zawiera wszelki możliwości funkcjonalne konieczne do przesyłania danych przez Internet, dzięki czemu programiści nie muszą implementować ich we własnym zakresie. Za chwilę przekonasz się, że klasa ta wygląda bardzo podobnie do pliku .asmx przechowywanego na serwerze, na którym działa serwis sieci WWW, różni się jednak od niego wywołaniami kilku metod.

Klasa pośrednicząca generowana jest przy użyciu kolejnego programu — wsdl.exe. Program ten analizuje plik .discomap lub XML-owy opis serwisu dostępny bezpośrednio na serwerze i na ich podstawie tworzy klasę której metody idealnie odpowiadają metodom udostępnianym przez serwis sieci WWW. To podobieństwo metod serwisu i klasy pośredniczącej ma sprawić, że użycie tej klasy będzie możliwie niewidoczne. Strona ASP.NET korzystająca z serwisu może zostać stworzona w taki sposób, jak gdyby komunikowała się z nim bezpośrednio. Co więcej, program wsdl.exe generuje metody i używa atrybutów dzięki którym klasa pośrednicząca będzie w stanie przesyłać dane przez Internet.

Oczywiście klasę pośredniczącą można także stworzyć ręcznie, ale dlaczego mielibyśmy utrudniać sobie życie, skoro program wsdl.exe może ją wygenerować za nas? (Jeśli jednak jesteś zdecydowany by własnoręcznie napisać klasę pośredniczącą, to w dalszej części rozdziału znajdziesz informacje o wszelkich wymaganiach jakie musi ona spełniać.)

Notatka
Zwróć uwagę, że program wsdl.exe może bezpośrednio przeanalizować opis serwisu sieci WWW. Oznacza to, że jeśli znany jest adres URL tego opisu, to nie trzeba wcześniej korzystać z programu disco.exe.

Sprawdźmy jak to wygląda w praktyce. W oknie wiersza poleceń wpisz i wykonaj następujące polecenie:

wsdl /language:VB http://localhost/aspnetdlakazdego/rozdzial16/Calculator.asmx?WSDL

 

Postać wywołania tego programu zostanie opisana w dalszej części tego rozdziału. Jak na razie wystarczy abyś wiedział, że pierwszy parametr — /language — określa język w jakim ma zostać wygenerowana klasa pośrednicząca (w tym przypadku jest to język VB.NET). Drugi parametr wywołania programu określa adres URL opisu serwisu. (Adres ten poznaliśmy w poprzednim rozdziale, pt.: „Tworzenie serwisów sieci WWW”.)

Po wykonaniu programu w sposób przedstawiony na powyższym przykładzie, na ekranie pojawią się komunikaty o następującej postaci:

wsdl /language:VB http://localhost/aspnetdlakazdego/rozdzial16/ Calculator.asmx?WSDL

Microsoft (R) Web Services Description Language Utility

[Microsoft (R) .NET Framework, Version 1.0.2914.16]

Copyright (C) Microsoft Corp. 1998-2001. All rights reserved.

 

Writing file 'C:\Inetpub\wwwroot\aspnetdlakazdego\rozdzial17\Calculator.vb'.

 

Zwróć uwagę, że program wygenerował klasę języka VB.NET i zapisał ją w pliku Calculator.vb. Jest to nasza klasa pośrednicząca. Warto poświecić nieco czasu na przeanalizowanie utworzonego pliku. (Można go będzie znaleźć w tym samym folderze w którym został wykonany program wsdl.exe.) Kod naszej przykładowej klasy pośredniczącej został przedstawiony na listingu 17.2.

 

Listing 17.2.              Wygenerowany plik Calculatro.vb.

1           '-----------------------------------------------------------------------

...

Zgłoś jeśli naruszono regulamin