UWAGA! Promocja dla firm - MICROSOFT OFFICE 365  na 12 miesiecy ZA DARMO! Tylko na CentrumXP.pl!
Wielka promocja Office 365 na CentrumXP.pl!
Do góry Skomentuj

20. Korzystanie z Web Service'ów

20. Korzystanie z Web Service'ów

Autor: Piotr Gaszewski Opublikowano: 23 czerwca 2006 Odsłon: 54 990

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.

Zobacz również

Komentarze

(...) W górnej części ekrany możemy dostrzec listę metod... Szczerze mowiąc to ciezko jest tam dostrzec cokolwiek; stad prosba do autorów o obrazki w troche lepszej jakosci, równiez w przypadku innych kursow na tym portalu. pozdrawiam.
kamcio, 28 czerwca 2006, 20:50
Przecież to miniaturka, wystarczy kliknąc, obrazek się powiększy, kliknąc jeszcze raz i będzie w normalnej rozdzielczości w niezłej jakości. Ehhh....kolejna prowokacja?

Bobi, 28 czerwca 2006, 21:11
Kurs jest rewelacyjny dla poczatkujacych jak i dla sredniozaawansowanych. Bardzo wiele pozytecznych i najczesciej potrzebnych inf w pigulce. Brawa!
ruby, 6 lipca 2006, 12:00
Hej, zrobilem to tak, jak napisano w artykule. Potem stworzylem New Web Site, dodalem Web Reference i kiedy klikam Ctrl+F5 wszystko dziala, ale kiedy odpalam te strone normalnie w przegladarce, dostaje blad CS0246: The type or namespace name 'localhost' could not be found Tak ma byc?
Michal, 21 sierpnia 2006, 00:03
Moje podsumowanie kursu: Ciezko sie czytalo chociaz duzo sie nauczylem(tutaj brawa!). Autor zbyt duzo bledow robi - merytorycznych jak i ortograficznych (nawet!), czasem gubi watek, czasem przyjmuje cos za oczywiste czego ktos kto dopiero przeczytal co to ASP.NET nie jest w stanie wykryc.. Ogolnie duzy + z malym minusem.
Daniel, 6 września 2006, 17:03
Dzięki za kurs. Programowałem w PHP i przerzucam się na C# ASP.NET. To mój pierwszy kurs. Czytałem wcześniej książkę do C#, ale wszystko było tam chaotyczne. Ogólnie kurs spoczko, zrobiłeś parę błędów (najgorsze te w składni:), ale to w sumie i dobrze bo zmusza do myślenia jak coś nie działa, a nie tylko przepisywanie kodu na pałe. Wielkie dzięki za kurs. Bardzo mi pomógł.
Mojo, 21 czerwca 2007, 22:16
Powiem prosto. Dzięki.
 
Przerzucam się z javy na c# i tego dokładnie było mi potrzeba. Ta wiedza będzie wykożystana w nie jednym projekcie:)

Reymond, 30 października 2008, 19:39
Kropla w morzu...

Danio, 5 stycznia 2009, 16:42
Kropla , ale od niej trzeba zacząć:)

Reymond, 21 stycznia 2009, 17:41
Niestety u mnie nie generuje kodu xml po kliknieciu przycisku invoke. Od razu mam wnik np funkcji add - czyli jak wywolam funkcje add(1,2) to otworzy się nwoa strona z wynikiem 3. Dlaczergo nie generuje mi xml-a ?? Mam visual studio 2010
nocturn, 11 lipca 2010, 15:12

Dodaj swój komentarz

Zasady publikacji komentarzyZasady publikacji komentarzy

Redakcja CentrumXP.pl nie odpowiada za treść komentarzy publikowanych na stronach Portalu
i zastrzega sobie prawo do usuwania wypowiedzi, które:

  • zawierają słowa wulgarne, obraźliwe, prowokujące i inne naruszające dobre obyczaje;
  • są jedynie próbami reklamowania stron internetowych (spamowanie poprzez umieszczanie linków);
  • przyczyniają się do złamania prawa bądź warunków licencyjnych oprogramowania (cracki, seriale, torrenty itp.);
  • zawierają dane osobowe, teleadresowe, adresy mailowe lub numery GG;
  • merytorycznie nie wnoszą nic do dyskusji lub nie mają związku z tematem komentowanego newsa, artykułu bądź pliku.

Autor:

Komentarz:

Dodaj komentarz