Web Service’y, określane również jako usługi sieciowe,
umożliwiają budowę prostych, rozproszonych aplikacji, niezależnych od
platformy. W swoim działaniu wykorzystują one powszechnie znany standard XML.
Dostęp do usług sieciowych jest również niezwykle prosty, dzięki zastosowaniu
standartowych protokołów, takich jak HTTP czy SOAP. Web Service’y mogą być
wykorzystywane do integracji aplikacji tworzonych w rozmaitych językach
programowania, na różnych platformach deweloperskich. Jedną z ich
najważniejszych zalet jest fakt, że aplikacja kliencka, która chce skorzystać z
udostępnianej usługi, nie musi być stworzona w tym samym języku, co Web
Service, co więcej – nie musi nawet posiadać wiedzy na temat budowy usługi. Jedyne,
co jest potrzebne, do wykorzystywania tej technologii, jest internetowy adres usługi,
oraz nazwy metod przez nią udostępnianych. W rozdziale tym pokażę, w jaki
sposób możemy wykorzystywać Web service’y przy tworzeniu stron internetowych w
technologii ASP.NET.
Na początku spróbujmy utworzyć prosty Web Service za pomocą
Visual Studio 2005. Po otwarciu środowiska programistycznego wybieramy kolejno
opcje: File -> New -> WebSite -> ASP.NET Web Service. W ostatnim
przypadku musimy ponadto podać położenie plików projektu na dysku twardym
komputera (może być to również maszyna zdalna – pliki udostępniane są wówczas
za pośrednictwem protokołów HTTP lub FTP), oraz język programowania, w którym
zostanie stworzona usługa. Standartowo, do wyboru mamy języki: Visual Basic, C#
oraz J#.
Po naciśnięciu przycisku „OK.” Visual Studio utworzy
projekt, korzystając z gotowego szablonu. W oknie Solution Explorera
możemy obejrzeć pliki wchodzące w skład naszej usługi sieciowej.

W tym momencie najbardziej będzie interesować nas zawartość
pliku Service.cs. Przyjrzyjmy się jego zawartości.
using
System;
using
System.Web;
using
System.Web.Services;
using
System.Web.Services.Protocols;
[WebService(Namespace
= "http://tempuri.org/")]
[WebServiceBinding(ConformsTo
= WsiProfiles.BasicProfile1_1)]
public
class Service : System.Web.Services.WebService
{
public Service () {
}
[WebMethod]
public string HelloWorld() {
return "Hello
World";
}
}
Widzimy, że nasz Web Service to w rzeczywistości pojedyncza
klasa dziedzicząca po klasie System.Web.Services.WebService. Klasa posiada
domyślny konstruktor, oraz jedną, gotową do wykorzystania, metodę o nazwie
HelloWorld (a jakżeby inaczej J).
Zauważmy, że metody, które mają być udostępniane przez usługę sieciową muszą
posiadać atrybut o nazwie [WebMethod].
Stworzony przez Visual Studio Web Service jest w tym
momencie gotowy do działania. Uruchamiamy go naciskając przycisk F5 (lub
kombinacje klawiszy: Ctrl + F5). Jeżeli wszystko przebiegło pomyślnie w oknie
przeglądarki powinniśmy ujrzeć następujący widok.

W górnej części ekrany możemy dostrzec listę metod,
udostępnianych przez usługę sieciową. Na razie, w tym miejscu widnieje tylko
jedna metoda, o nazwie HelloWorld. Aby zaprezentować działanie Web Service’u
klikamy lewym przyciskiem myszy na nazwie metody. Zostaniemy wówczas przeniesieni
na stronę, z której możemy wywołać powyższą metodę.

Aby uruchomić działanie metody naciskamy po prostu przycisk
„Invoke”. W tym momencie powinno otworzyć się nowe okno przeglądarki,
zawierające odpowiedź w formacie XML.
<?xml
version="1.0" encoding="utf-8" ?>
<string xmlns="http://tempuri.org/">Hello World</string>
Widzimy, że jedyną czynnością, która jest wykonywana przez
naszą metodę jest zwrócenie ciągu odpowiedniego napisu. Często musimy jednak
przekazać do metody usługi pewne informacje. Mogą być to przykładowo numer NIP,
którego poprawność musi zostać sprawdzona, lub inne wartości, na których mają
być wykonywane obliczenia. Spróbujmy teraz dodać do klasy Service metodę o
nazwie Add. Jej zadaniem będzie zwracanie sumy dwóch parametrów przekazanych do
metody. Przedstawiony poniżej kod metody nie różni się niczym od tego,
wykorzystywanego w „zwykłych” klasach języka C#. Jedyną różnicą jest podanie
przed nazwą metody atrybutu [WebMethod]. Informuje on, że metoda ta może zostać
wywołana przez aplikacje, korzystające z Web Service’u.
[WebMethod]
public
int Add(int a, int b)
{
int
c = a + b;
return
c;
}
Przy próbie wywołania metody przez naciśnięcie przycisku
„Invoke” zostaniemy teraz poproszeni o podanie parametrów wejściowych metody.

W ostatniej części artykułu postaram się zaprezentować, w
jaki sposób wykorzystać nasz Web Service w aplikacji ASP.NET. Pierwszym
krokiem, który musimy w tym celu wykonać jest dodanie referencji do naszej
usługi sieciowej. Wybieramy w tym celu z menu kolejno opcje: Website -> Add
Web Reference. W nowo otwartym oknie podajemy adres naszego Web Service’u. W
moim przypadku będzie to:
http://localhost:1032/WebService01/Service.asmx?wsdl.

Pamiętajmy, aby po nazwie pliku nie zapomnieć o zakończeniu
adresu ciągiem „?wsdl”. WSDL (Web Service Description Language) jest formalnym
językiem opisu usługi. Zapewnia obsługę typów, informuje o używanych
protokołach. Właśnie dzięki niemu różnorodne systemy mogą wykorzystywać
pojedynczy Web Service.
Następnie naciskamy przycisk „Go”. Jeżeli Web Service
zostanie odnaleziony w powyższym oknie pojawią się nazwy metod, udostępnianych
przez niego. Wówczas pozostaje nam jedynie naciśnięcie przycisku „Add
Reference”.

Teraz pozostaje nam jedynie użycie metod, udostępnianych
przez naszą usługę sieciową. Robimy to w bardzo podobny sposób, jak w przypadku
wykorzystywania lokalnych bibliotek. Na początku musimy utworzyć obiekt
reprezentujący Web Service. Następnie wywołujemy jego metodę. Kod źródłowy
prezentujący wywołanie metody HelloWorld naszego Web Service’u prezentuje się
następująco:
protected void Page_Load(object sender, EventArgs e)
{
localhost.Service
myservice = new localhost.Service();
this.Response.Write(myservice.HelloWorld());
}
W analogiczny sposób możemy wywołać metody, do których
przekazujemy parametry.
protected void Page_Load(object sender, EventArgs e)
{
localhost.Service
myservice = new localhost.Service();
this.Response.Write((myservice.Add(12,13)).ToString());
}
Na koniec podam kilka istotnych faktów, o których musimy
pamiętać projektując usługę sieciową. Po pierwsze, wymienianie danych w ten
sposób jest dość kosztowne, ponieważ wykorzystuje komunikację sieciową. Lepiej
więc korzystać z usługi rzadziej, za to za jednym razem żądając większej ilości
danych wynikowych. Inna sprawą, o której musimy pamiętać, jest fakt, że dane są
przesyłane przez sieć w sposób niezaszyfrowany, wykorzystując format XML, co
ułatwia ich odczytanie przez nieuprawnione osoby. W końcu, projektując tego
typu usługę musimy wziąć pod uwagę fakt, że może być ona jednocześnie używana
przez setki, a nawet tysiące osób. Trzeba więc myśleć o skalowalności
aplikacji, aby była ona w stanie obsłużyć określoną ilość użytkowników.