XML ASP.NET webové služby: Rozdiel medzi revíziami

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
Riadok 147: Riadok 147:
 
|}
 
|}
  
====Atribút WebServiceBinding====
+
===Atribút WebServiceBinding===
  
 
Atribút '''WebServiceBinding''' špecifikuje, či je XML ASP.NET webová služba v súlade s Web Services Interoperability (WSI) Basic Profile 1.1.<nowiki>[</nowiki>3<nowiki>]</nowiki> Tým, že je trieda  webovej služby kvalifikovaná atribútom WebServiceBinding, prehlasuje, že  je v súlade so špecifikáciou WSI Basic Profile 1.1.  Špecifikácia WSI Basic Profile odstraňuje nejednoznačnú interpretáciu prvkov WSDL dokumentu webovými servermi, napríklad IIS, Apache a architektúrami .NET a J2EE.  Prostredníctvom vlastnosti '''ConformsTo''' atribútu WebServiceBinding môžeme nastaviť, či je daná webová služba v súlade so špecifikáciou WSI. Vlastnosť ConformsTo môže nadobúdať tieto hodnoty <nowiki>[</nowiki>3<nowiki>]</nowiki>:
 
Atribút '''WebServiceBinding''' špecifikuje, či je XML ASP.NET webová služba v súlade s Web Services Interoperability (WSI) Basic Profile 1.1.<nowiki>[</nowiki>3<nowiki>]</nowiki> Tým, že je trieda  webovej služby kvalifikovaná atribútom WebServiceBinding, prehlasuje, že  je v súlade so špecifikáciou WSI Basic Profile 1.1.  Špecifikácia WSI Basic Profile odstraňuje nejednoznačnú interpretáciu prvkov WSDL dokumentu webovými servermi, napríklad IIS, Apache a architektúrami .NET a J2EE.  Prostredníctvom vlastnosti '''ConformsTo''' atribútu WebServiceBinding môžeme nastaviť, či je daná webová služba v súlade so špecifikáciou WSI. Vlastnosť ConformsTo môže nadobúdať tieto hodnoty <nowiki>[</nowiki>3<nowiki>]</nowiki>:

Verzia zo dňa a času 13:30, 11. jún 2010

XML ASP.NET webové služby

V predchádzajúcej kapitole sme si vysvetlili princípy XML webových služieb, popísali štandardy na ktorých sú vystavané, ich výhody aj nevýhody a spôsob, akým komunikujú webové služby s klientskymi aplikáciami.

Táto práca sa zaoberá bezpečnosťou XML ASP.NET webových služieb. Technológia ASP.NET je integrovaná s programovou platformou .NET Framework. .NET Framework predstavuje programovú platformu, ktorá je rozčlenená do kolekcie funkčných častí, zahŕňajúcich viac ako 7000 tried, štruktúr, rozhraní a ďalších typov. Každá zo skupiny tried v .NET Framework je zoskupená do logického hierarchického kontajnera, nazývaného menný priestor. Pre viac informácií o platforme .NET Framework odporúčame referenčnú príručku .NET. [31] Na Obr. 2.1 je znázornená štruktúra programovej platformy .NET Framework 3.5.


Obr. 2.1 .NET Framework 3.5 [2]

ASP.NET implementuje XML webové služby ako súbory s príponou .asmx. Kód webovej služby môže byť umiestnený priamo do súboru .asmx alebo do triedy v súbore s kódom na pozadí. Táto práca predpokladá určitú znalosť programovej platformy .NET Framework a technológie ASP.NET, a preto sa nebudeme samotnou programovou platformou v práci zaoberať. Pri vytváraní XML ASP.NET webových služieb pod platformou .NET Framework je nutné sa najskôr oboznámiť s niektorými mennými priestormi .NET Framework, ktoré umožňujú komunikovať s technológiou XML webových služieb. Popis jednotlivých menných priestorov je v Tab. 2.1.


Tab. 2.1 Menné priestory .NET Framework zamerané na XML ASP.NET webové služby [4]</nowiki>
Menný priestor Význam
System.Web.Service Obsahuje základné typy nutné pri vytváraný XML webových služieb.
System.Web.Service.Configuration Obsahuje typy, ktoré umožňujú konfiguráciu správania sa webových služieb ASP.NET
System.Web.Service.Description Obsahuje typy, ktoré umožňujú programátorsky komunikovať s dokumentom WSDL popisujúci danú XML ASP.NET webovú službu.
System.Web.Service.Discovery Obsahuje typy, ktoré umožňujú klientovi webovej služby programátorsky zistiť, aké webové služby sú nainštalované na danom servery.
System.Web.Service.Discovery Definuje typy, ktoré reprezentujú základ rôznych protokolov XML webových služieb , napríklad HTTP GET, HTTP POST a SOAP.


Všetky menné priestory zamerané na XML ASP.NET webové služby sú obsiahnuté v assembly System.Web.Services.dll.[1]

Najdôležitejší menný priestor pri vytváraní XML ASP.NET webových služieb je System.Web.Services. Popis členov tohto menného priestoru je v Tab. 2.2.


Tab. 2.2 Popis menného priestoru System.Web.Services [2]
Menný priestor Význam
WebMethodAttribute Pokiaľ je metóda alebo vlastnosť triedy webovej služby špecifikovaná pomocou tohoto atribútu, znamená to, že člena bude možné volať cez HTTP kanál a serializovať ako XML.
WebService Predstavuje základnú, nepovinnú triedu XML ASP.NET webových služieb budovaných pomocou .NET. Pokiaľ je trieda XML webovej služby odvodená z tejto základnej triedy, bude mat schopnosť si uchovávať stavové informácie.
WebServiceAttribute Pomocou tohto atribútu sa dajú pridávať informácie do webovej služby, ako napríklad reťazec popisujúci jej funkcionalitu a podkladový priestor XML.
WebServiceBindingAttribute Tento atribút deklaruje protokol viazania, ktorý XML ASP.NET webová služba implementuje.
WsiProfiles Popisuje špecifikáciu interoperability webovej služby (WSI).


Základná trieda WebService

Pokiaľ vytvárame XML ASP.NET webovú službu s využitím IDE Visual Studio, novovytvorená trieda webovej služby je automaticky odvodená zo základnej triedy WebService. (pozri Tab. 2.3). To, že trieda webovej služby dedí zo základnej triedy WebService, umožňuje prístup ku všetkým zabudovaným objektom ASP.NET, napríklad Application, Session atd. Vlastnosti základnej triedy WebService, ktoré získa trieda webovej služby dedením, sú v Tab. 2.4.


Tab. 2.3 Vytvorenie triedy webovej služby dedením zo základnej triedy WebService
WebServiceClass: System.Web.Services


Tab. 2.4 Vlastnosti základnej triedy WebService [1]
Vlastnosť Význam
Application Inštancia triedy HttpApplicationState, ktorá poskytuje prístup k globálnemu stavu webovej aplikácie.
Context Poskytuje prístup k HttpContext, ktorý zapúzdruje všetky špecifiká http kontextu pre aktuálnu požiadavku.
Server Poskytuje prístup k objektu HttpServerUtility aktuálneho požiadavku.
Session Inštancia triedy HttpSessionState, ktorá poskytuje prístup k aktuálnemu stavu relácie.
User Objekt IPrincipal, ktorý umožňuje preskúmať oprávnenia a rolu užívateľa, ktorý bol autentifikovaný.

Atribúty triedy XML ASP.NET webovej služby

Každá trieda XML ASP.NET webovej služby môže byť kvalifikovaná pomocou atribútov [7]:

  • WebService,
  • WebServiceBinding.


Atribút WebService

Atribút WebService podporuje niekoľko pomenovaných vlastností, konkrétne tieto [2]:

  • Namespace,
  • Description,
  • Name.

Prostredníctvom vlastnosti Namespace môžeme vytvoriť menný XML priestor, ktorý sa bude používať vo vnútri WSDL dokumentu (pozri Tab. 2.6). Vlastnosť Description popisuje webovú službu prostredníctvom textového reťazca. Prostredníctvom vlastnosti Name môžeme oddeliť názov triedy webovej služby od názvu, pod ktorým bude webová služba sprístupnená z Internetu alebo LAN. [1]


Tab. 2.5 Vlastnosti atribútu WebService
[WebService(Description="Secure web service",
Namespace = "http://DiplomaWork.sk/",
Name= "SecureWebService")]
public class WebServiceClas : System.Web.Services.WebService
{...}


Tab. 2.6 Menný priestor WSDL
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Secure web service</wsdl:documentation>

Atribút WebServiceBinding

Atribút WebServiceBinding špecifikuje, či je XML ASP.NET webová služba v súlade s Web Services Interoperability (WSI) Basic Profile 1.1.[3] Tým, že je trieda webovej služby kvalifikovaná atribútom WebServiceBinding, prehlasuje, že je v súlade so špecifikáciou WSI Basic Profile 1.1. Špecifikácia WSI Basic Profile odstraňuje nejednoznačnú interpretáciu prvkov WSDL dokumentu webovými servermi, napríklad IIS, Apache a architektúrami .NET a J2EE. Prostredníctvom vlastnosti ConformsTo atribútu WebServiceBinding môžeme nastaviť, či je daná webová služba v súlade so špecifikáciou WSI. Vlastnosť ConformsTo môže nadobúdať tieto hodnoty [3]:

  • None, webová služba neprehlasuje, že je v súlade s WSI.
  • BasicProfile1_1, webová služba prehlasuje, že je v súlade so špecifikáciou WSI Basic Profile 1.1


Tab. 2.7 Atribút WebServiceBinding
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class WebServiceClas : System.Web.Services.WebService
{...}

Atribút WebMethod

Atribút WebMethod musí byť aplikovaný na každú metódu triedy XML ASP.NET webovej služby, ktorá má byť dostupná cez HTTP kanál a serializovaná ako XML. Vlastnosti atribútu WebMethod sú v Tab. 2.8.


Tab. 2.8 Vlastnosti atribútu WebMethod [4]
Argument Význam
Description Popis webovej metódy.
MessageName Alias mena metódy, ktorý je používaný v prípade, že máme preťažované metódy, alebo pokiaľ chceme sprístupniť webovú metódu pod iným názvom.
CacheDuration Doba, na ktorú je uložená odpoveď webovej metódy do cache. Štandardne je hodnota cache nastavená na nula.
EnableSession Určuje, či daná webová metóda môže pristupovať k informácia v kolekcií Session. Umožňuje vytvoriť reláciu medzi webovou službou a klientom.
TransactionOption Nastaví, či daná webové metóda podporuje transakcie. Nakoľko webové služby sú bezstavové, môžu sa zúčastniť iba ako koreňový objekt transakcie.
BufferResponse Táto vlastnosť umožňuje riadiť, kedy budú dáta vrátené z webovej služby zaslané na klienta. Štandardne je vlastnosť BufferResponse nastavená na true. To znamená, že všetky výsledky sú pre zaslaním na klienta serializované. Pokiaľ je BufferResponse nastavená na false, výsledky sú serializované a posielané na klienta po častiach. Nastavenie vlastnosti BufferResponse na false ma zmysel, len vtedy ak webová služba vracia veľké množstvo dát.

Pri používaní XML ASP.NET webových služieb existujú určité obmedzenia ohľadom vstupných parametrov webových metód a ich návratových hodnôt. Tieto obmedzenia sú z toho dôvodu, že webové služby sú vybudované na štandardoch pre výmenu dát, a tie sú založené na jazyku XML. Webové metódy pracujú so sadou dátových typov, ktoré sú rozpoznávané štandardom schémy XML. Dátové typy webových metód XML ASP.NET webových služieb sú v Tab. 2.9. Toto obmedzenie je logické, pretože iné programovacie jazyky nemajú žiadne mechanizmy na rozpoznávanie napríklad komplexných tried, neboli by schopné interpretovať takéto dátové typy.


Tab. 2.9 Dátové typy pre parametre a návratové hodnoty webových metód [1]
Dátový typ Popis
Základné dátové typy Jednoduché dátové typy ako int, long, float, double, bool, string, char, byte a iné.
Polia Webové služby dokážu pracovať s akýmkoľvek polom podporovaného typu, prípadne kolekciami .NET ako HashTable, prípadne binárnymi poliami.
Vlastné objekty Akýkoľvek vlastný objekt môže byť webovou službou poslaní na klienta. Prenášajú sa iba verejné členy triedy.
Enumerations  
XmlNode Objekty založené na System.XmlNode reprezentujúce časti XML dokumentu.
DataSet a DataTable Tieto objekty patria medzi dátové objekty ADO.NET a môžu byť použité pre posielanie informácií z relačnej databázy. Tieto objekty sú XML ASP.NET webovou službou automaticky skonvertované na XML.

Trieda proxy

Pre korektnú komunikáciu klienta s XML ASP.NET webovou službou musí byť klient schopný vytvárať, posielať a dostávať SOAP správy založené na XML, ktorým buderozumieť. Principiálne jednoduchý proces, ale v praxi veľmi náročný, nakoľko by sme museli dookola písať rovnaký kód infraštruktúry nižšej úrovne. [4]

Platforma .NET to rieši v podobe triedy proxy, ktorá to vykonáva namiesto klientskej aplikácie. Trieda proxy zabezpečuje správne vytváranie formátu SOAP správy, riadi prenos správ pomocou HTTP po sieti, tak isto konvertuje výsledok prijatej správy do správneho formátu.

Na vytvorenie triedy proxy v .NET existujú dva spôsoby [1]:

  • Pomocou utility wsdl.exe.
  • Pomocou webovej referencie v IDE Visual Studio.

Generovanie triedy proxy prostredníctvom utility wsdl.exe je flexibilnejšie, nakoľko nám umožňuje vygenerovaný kód danej triedy modifikovať.

Názov utility wsdl.exe je odvodený od štandardu Web Service Description Language pre popis XML webových služieb. Tento nástroj vygeneruje z XML webovej služby zdrojový kód triedy proxy vo zvolenom jazyku.

Utilita wsdl.exe podporuje veľké množstvo prepínačov, najbežnejšie argumenty sú v Tab. 2.10.


Tab. 2.10 Argumenty utility wsdl.exe [1]
Argument Význam
/appsettingurlkey Trieda proxy bude nakonfigurovaná tak, aby načítavala URL zo súboru .*config na klientskej strane.
/language Pomocou tohto argumentu špecifikujeme jazyk pre vygenerovanú triedu (C , VB.NET, JS, VJS).
/namespace Argument špecifikuje menný priestor pre vygenerovanú triedu proxy.
/out Špecifikuje súbor do ktorého sa uloží vygenerovaný kód proxy.
/protocol Tento argument špecifikuje protokol, ktorý sa má použiť vo vnútri triedy proxy. Prednastavení protokolom je SOAP. Ďalšie podporované protokoly sú HTTP POST a HTTP GET.
/serverInterface Na základe WSDL dokumentu sa vygeneruje kostra webovej služby na strane servera.

Pre korektnú komunikáciu medzi webovou službou a klientmi, ale aj kvôli zvýšenej bezpečnosti na strane prevádzkovateľa webovej služby sa využíva implementácia triedy proxy prostredníctvom DLL knižnice u klienta.

Popis kódu triedy proxy

Každá trieda proxy je vytvorená odvodením z triedy :

  • System.Web.Services.Protocols.SoapHttpClientProtocol,
  • System.Web.Services.Protocols.HttpGetClientProtocol,
  • System.Web.Services.Protocols.HttpPostClientProtocol.

Konkrétny typ použitej triedy záleží od špecifikácie protokolu, ktorý má trieda proxy používať pri generovaní prostredníctvom utility wsdl.exe.

Vytvorenie triedy proxy odvodením z príslušnej triedy .NET Framework umožňuje triede proxy korektne formátovať a konvertovať správy. Dôležité zdedené členy triedy proxy sú v Tab. 2.11.


Tab. 2.11 Popis členov triedy proxy [7]
Člen triedy proxy Popis
BeginInvoke() Metóda zahajujúca asynchrónne volanie webovej metódy.
CancelAsync() Metóda preruší asynchrónne volanie webovej metódy.
EndInvoke() Metóda ukončí asynchrónne volanie webovej metódy.
AsynInvoke() Metóda zahajujúca asynchrónne volanie webovej metódy, doporučená metóda.
Invoke() Metóda zahajujúca synchrónne volanie webovej metódy.
Proxy Vlastnosť slúžia na nastavenie a získanie informácie proxy.
Timeout Metóda umožňujúca nastaviť dobu čakanie klientskej aplikácie na odpoveď od webovej služby v milisekundách.
Url Vlastnosť slúžia na nastavenie alebo získanie URL ASP.NET webovej služby.
UserAgent Vlastnosť slúžiaca na nastavenie hlavičky agenta užívateľa, ktorá je odosielaná s každou SOAP požiadavkou, slúži na identifikáciu klienta.

Asynchrónne volanie XML ASP.NET webových služieb umožňuje klientskej aplikácii pokračovať v činnosti, zatiaľ čo čaká na odpoveď od webovej služby. Asynchrónne volanie webovej služby má zmysel použiť, pokiaľ je server webovej služby pripojený pomalým sieťovým pripojením.

Komunikácia klientskej aplikácie s využitím triedy proxy je znázornená na Obr. 2.2.


Obr. 2.2 Komunikácia klienta s webovou službou prostredníctvom triedy proxy