Webová služba umožňuje webové stránce rozšířit její funkcionalitu a dynamičnost díky možnosti programování. Webové služby mohou přijímat zprávy a na tyto zprávy odpovídat. |
Dnes je možno přes internet provádět dotazy nad databázemi, objednat si letenku, zjistit stav naší zakázky apod.
Webové služby mohou být volány prostřednictvím POST nebo GET metod protokolu HTTP ve spojení s protokolem SOAP.
Webové služby se ukládají do souborů s příponou .asmx. Podmínkou pro správnou funkci webové služby je přítomnost ASP.NET na webovém serveru. Pokud prostředí ASP.NET zjistí požadavek na soubor s touto příponou, zprostředkuje volání handleru webové služby.
Tyto handlery jsou reprezentovány instancemi tříd implementujících rozhraní System.Web.IHTTPHandler. Rozhraní IHTTPHandler definuje dvě metody - IsReusable a ProcessRequest. IsReusable umožňuje zjistit instanci IHTTPHandleru, zda může být použita vícekrát. Metoda ProcessRequest má objekt HttpContext jako svůj parametr. Právě zde se začíná implementovat práce s HTTP.
Tyto handlery přijímají požadavky a vracejí odpovědi. Pokud se v HTTP prostředí zjistí přítomnost na požadavek souboru s příponou .aspx, zavolá se handler registrovaný pro soubory s touto příponou. V prostředí ASP.NET je tímto handlerem System.Web.UI.PageHandlerFactory. V případě .asmx je zavolán handler System.Web.Services.Protocols.WebServiceHandlerFactory.
Díky tomuto handleru je ASP.NET schopno s použitím reflexe vytvořit dynamicky HTML stránku. Stránka bude obsahovat možnosti a metody volané služby. Na této straně se rovněž objeví možnost otestovat metody této služby.
Vytvoříme jednoduchou webovou službu, kterou uložíme jako GreetingService.asmx:
<%@ WebService Language="C#" class="GreetingService" %> using System; using System.Web.Services; public class GreetingService { [WebMethod] public string Hello(string who) { return ("Hello, world!!! Special greetings for " + who); } } |
Pro označení metody jako použitelné pro webovou službu se nad tuto metodu přidává atribut WebMethod. Abychom mohli tuto metodu vyzkoušet na našem počítači, je zapotřebí mít nainstalovaný webový server podporující ASP.NET (IIS apod.). Tento soubor zkopírujeme do virtuálního adresáře serveru a zavoláme jej z prohlížeče, např.: http://localhost/sluzba/GreetingService.asmx.
Webové služby nejsou omezeny používáním pouze jednoduchých datových typů, mezi které patří řetězce a čísla. Lze používat i složitější typy, například struktury apod.
Součástí Microsoft Visual Studia je konzolová aplikace WSDL (umístění v adresáři Microsoft Visual Studio .NET\Sdk\v1.1\Bin). Tato aplikace vytvoří zástupce webové služby tak, aby ji bylo možno používat lokálně. Předtím je třeba udělat následující kroky.
Nejprve zjistíme umístění webové služby.
Například víme, že se služba nachází na adrese http://localhost/sluzba\GreetingTest.asmx.
Následně vytvoříme místního zástupce (proxy) pro vzdálenou službu. Tento zástupce umožní programátorovi s webovou službou pracovat, jako by se nacházela na lokálním počítači.
wsdl "http://localhost/sluzba/GreetingService.asmx" /out:GreetingServiceProxy.cs
Vytvoříme knihovnu ze zástupce webové služby
csc /out:bin\GreetingServiceProxy.dll /t:library /r:system.web.services.dll /r:system.xml.serialization.dll GreetingServiceProxy.cs
vytvořili jsme GreetingServiceProxy.dll v adresáři Bin aktuálního adresáře
Následující aplikace používá službu GreetingService.
using System; class MyClass { public static void Main(string[] args) { // vytvoreni instance objektu puvodne definovaneho v GreetingService.asmx // a pripojeneho diky WSDL kontraktu GreetingService gs = new GreetingService(); // nasleduje bezna prace s instanci vzdaleneho objektu Console.WriteLine(gt.Hello("Jan")); } } |
Takto vytvořený kód uložíme do souboru GreetingTest.cs a budeme kompilovat následujícím způsobem (a s těmito knihovnami):
csc /r:system.web.services.dll /r:GreetingServiceProxy.dll GreetingTest.cs