Využití webových služeb v .NET aplikacích

23. dubna 2002

Nejprve vás seznámím s pojmy UDDI a WSDL a poté si na příkladě konkrétní aplikace vyzkoušíte využití webové služby, která je napojena na aukci domén aukce.czechia.com.

Stále častěji se budete setkávat s rostoucí nabídkou webových služeb poskytujících rozmanitou funkčnost, jako tomu bylo u komponentové technologie COM. Podstatné tedy bude získat informace o tom, kde je možné nalézt webovou službu s požadovanou funkčností a jak její služby zavolat.

UDDI

Odpověď na první otázku se snaží dát společná iniciativa firem Microsoft, IBM, Sun, Oracle, Hewlett Packard, Intel a stovek dalších v návrhu standardu Universal Description, Discovery, and Integration (UDDI). Jedná se v podstatě o globální rejstřík, který obsahuje strukturované informace o firmách a webových službách, které jsou jimi nabízeny. Jak informace o firmách, tak informace o webových službách jsou rozděleny do kategorií. Vyhledávání pak probíhá podle zvolené kategorie.

UDDI je provozováno na uzlech, které nabízejí různé technologie na různých platformách, avšak díky tomu, že splňují specifikaci, je pro koncového uživatele lhostejné, který uzel pro vyhledávání informací využije. Uzly samozřejmě vzájemně replikují data, takže pokud přidáte informace o své webové službě na jeden uzel, objeví se po určitém intervalu i na ostatních uzlech. Pro porovnání uzel od Microsoftu je na http://uddi.microsoft.com/, od IBM na http://www-3.ibm.com/services/uddi/. Specifikaci UDDI naleznete na http://www.uddi.org/.

Jak již bylo zmíněno, UDDI je pouze rejstřík, což znamená, že výsledkem hledání webové služby je její adresa. Adresu do rejstříku uložil tvůrce webové služby. UDDI uzly tedy obsahují adresy webových služeb, nikoli služby samotné.

WSDL

Jakmile víte, kde se požadovaná služba nalézá, potřebujete také vědět, jakým způsobem ji zavolat, jaké datové typy podporuje apod. Přesný popis toho, co služba nabízí a jak ji použít, poskytuje technologie příhodně nazvaná Web Service Description Language (WSDL), tedy jazyk popisující webovou službu. Jedná se o XML dokument, který je rozdělen do několika sekcí, které popisují XML schéma pro formátování dat, formáty vstupních a výstupních zpráv a umístění webové služby.

ASP.NET generuje WSDL dokument automaticky. Stačí přidat za URL adresu webové služby ?WSDL, např. vložením http://aspx1.podklady/1999-2008.interval.cz/horinek/002/service1.asmx?WSDL do internetového prohlížeče získáte WSDL dokument popisující webovou službu, kterou za okamžik použijete. Informace obsažená v dokumentu WSDL je komplexní a umožňuje vám vytvořit proxy třídu, která umí vyvolávat metody webové služby zasíláním a čtením SOAP zpráv (XML dokumenty zasílané přes HTTP). Proxy třída je třída, která skrývá funkčnost webové služby a navenek se tváří jako lokální třída se stejnými metodami, jaké obsahuje webová služba. Vytvoření proxy třídy lze zautomatizovat, čehož využívají různé nástroje jako wsdl.exe a samozřejmě Visual Studio .NET.

Vytvoření proxy pomocí Visual Studia .NET

Nyní si zkusíte vytvořit jednoduchou aplikaci, která bude zobrazovat poslední přidané domény do doménové aukce nacházející se na adrese http://aukce.czechia.com. Počet domén bude možné zadávat přes ovládací prvek TextBox. Po stisknutí tlačítka bude zavolána webová služba http://aspx1.podklady/1999-2008.interval.cz/horinek/002/service1.asmx, která vrátí zvolený počet naposledy přidaných domén. Seznam domén bude následně zobrazen v ovládacím prvku ListBox. Webová služba byla vytvořena podle článku Vytváříme webovou službu v .NET.

1) Spusťte Visual Studio .NET a vytvořte nový projekt typu ASP.NET Web Application v jazyce C#. Jako jméno projektu zadejte např. DomenovaAukceApp.

2) Na webový formulář WebForm1.aspx přidejte serverové ovládací prvky (controls) typu Label, TextBox, Button a ListBox. U prvku Label nastavte atribut Text na hodnotu „Zadejte počet domén:“. Formulář bude vypadat asi takto:

3) V okně Solution Explorer klikněte pravým tlačítkem myši a z menu vyberte položku Add Web Reference… V novém okně, které se otevře, vložte do pole pro adresu webové služby http://aspx1.podklady/1999-2008.interval.cz/horinek/002/service1.asmx. Tuto adresu musíte předem znát. Jinou možností by bylo vyhledat ji pomocí UDDI. Tam však není tato služba registrována. Stisknutím tlačítka Enter dojde ke kontaktování služby a k aktualizaci okna, které bude obsahovat informace k webové službě. Kliknutím na odkaz View Contract lze zobrazit v levé části WSDL dokument.

4) Nyní stiskněte tlačítko Add Reference. Tím Visual Studio .NET na základě informací obsažených ve WSDL dokumentu automaticky vytvoří proxy třídu s názvem Seznam ve jmeném prostoru cz.aspx.interval, která reprezentuje webovou službu. Nyní vložte kód, který se vykoná po stisknutí tlačítka.

private void Button1_Click(object sender, System.EventArgs e) { string[] vysledek; cz.aspx.interval.Seznam seznamAukci =
new cz.aspx.interval.Seznam(); vysledek = seznamAukci.PosledniPridane
(System.Convert.ToInt16(TextBox1.Text)); ListBox1.DataSource = vysledek; ListBox1.DataBind(); }

Objekt seznamAukci je instancí proxy třídy. Volání metody PosledniPridane webové služby je díky proxy třídě identické s voláním metody jakékoli lokální třídy. Aplikaci lze nyní zkompilovat a spustit. Výsledek vidíte zde.

Vytvoření proxy pomocí nástroje wsdl.exe

Menší komfort, než Visual Studio .NET, poskytuje nástroj wsdl.exe volaný z příkazové řádky. Tento nástroj slouží pro vytvoření proxy z informací obsažených ve WSDL dokumentu. Proxy v jazyce C# vytvoříte zadáním příkazu:

c:\>wsdl
http://aspx1.podklady/1999-2008.interval.cz/horinek/002/service1.asmx?WSDL

Výsledný proxy soubor Seznam.cs je třeba ještě zkompilovat do assembly a následně zkopírovat do adresáře bin ASP.NET aplikace. Kompilaci provedete příkazem:

C:\>csc /target:library /out:aukceproxy.dll seznam.cs

Formulář lze vytvořit pomocí libovolného textového editoru a měl vypadat asi takto:

<%@ Page language=“c#“%> <!DOCTYPE HTML PUBLIC „-//W3C//DTD HTML 4.0 Transitional//EN“> <HTML> <HEAD> <title>WebForm2</title> </HEAD> <script language=“C#“ runat=server> private void Button1_Click(object sender, System.EventArgs
e) { string[] vysledek; Seznam seznamAukci = new Seznam(); vysledek = seznamAukci.PosledniPridane
(System.Convert.ToInt16(TextBox1.Text)); ListBox1.DataSource = vysledek; ListBox1.DataBind(); } </script> <body> <form id=“Form1″ method=“post“ runat=“server“> <asp:TextBox id=“TextBox1″ style=“Z-INDEX: 101; LEFT:
170px;
POSITION: absolute; TOP: 36px“ runat=“server“></asp:TextBox> <asp:ListBox id=“ListBox1″ style=“Z-INDEX: 105; LEFT: 28px;
POSITION: absolute; TOP: 71px“ runat=“server“ Width=“367px“ Height=“118px“></asp:ListBox> <asp:Label id=“Label1″ style=“Z-INDEX: 103; LEFT: 27px;
POSITION: absolute; TOP: 37px“ runat=“server“>Zadejte počet domén:</asp:Label> <asp:Button id=“Button1″ style=“Z-INDEX: 102; LEFT: 339px;
POSITION: absolute; TOP: 36px“ runat=“server“ Text=“Button“ OnClick=“Button1_Click“>
</asp:Button> </form> </body> </HTML>

Kromě názvu proxy třídy, která není ve jmenném prostoru a toho, že kód pro zpracování události stisknutí tlačítka se přesunul přímo do souboru formuláře, se nic podstatného nězměnilo. Výsledek můžete vidět zde.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Štítky: Články

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *