XML ASP.NET webové služby: Rozdiel medzi revíziami
Riadok 323: | Riadok 323: | ||
Komunikácia klientskej aplikácie s využitím triedy proxy je znázornená na Obr. 2.2. | Komunikácia klientskej aplikácie s využitím triedy proxy je znázornená na Obr. 2.2. | ||
− | [[Súbor: | + | [[Súbor:dp_2010_jm_4.png|framed|center|Obr. 2.2 Komunikácia klienta s webovou službou prostredníctvom triedy proxy]] |
Verzia zo dňa a času 12:23, 8. apríl 2010
Obsah
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 logickej a hierarchického kontajnera, nazývaného menný priestor. Pre viac informácii o platforme .NET Framework odporúčame referenčnú príručku .NET [31]. Na Obr. 1.2 je znázornená štruktúra programovej platformy .NET Framework 3.5.
Obr. Chyba! V dokumente nie je žiaden text v zadanom štýle..3 .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 priestoroch je v Tab. 2.1.
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
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 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.
WebServiceClass: System.Web.Services
|
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]
[WebService(Description="Secure web service",
Namespace = "http://DiplomaWork.sk/",
Name= "SecureWebService")]
public class WebServiceClas : System.Web.Services.WebService
{...}
|
<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 prvokov 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.
[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.
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 obmedzenie 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.
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ť, 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ácia 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 bude rozumieť. Principiálne jednoduchý proces, ale v praxi veľmi obtiažny, 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 miesto klientskej aplikácie. Trieda proxy zabezpečuje správne vytváranie formátu SOAP správa, 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.
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, aj kvôli zvýšenej bezpečnosti strane prevádzkovateľa webovej služby sa využíva implementácia triedy proxy prostredníctvom DLL (Dynamic-link library) 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.
Č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 je pripojený pomalým sieťovaním pripojením. Týmto spôsobom volania webových metód sa v práci nebudeme zaoberať.
Komunikácia klientskej aplikácie s využitím triedy proxy je znázornená na Obr. 2.2.