Hogyan webes szolgáltatások

Ma már két alapvetően különböző módon végrehajtási Web alapú szolgáltatások HTTP, a Microsoft® .NET. Az első és legfontosabb az alacsony szintű technika, hogy írjon egy különleges besorolású IHttpHandler, amely bekerül a .NET HTTP csővezeték lánc. Ez a megközelítés alkalmazását igényli system.web API feldolgozni a bejövő HTTP-üzenetek és a System.Xml API kezelni a SOAP boríték található a HTTP szervezetben. Írásakor külön kezelő is szükség van, hogy manuálisan létrehozni egy WSDL dokumentum, amely leírja a végrehajtás. Ahhoz, hogy mindezt helyesen, akkor szükség van egy mély megértése XML specifikáció, XSD, SOAP és WSDL, ami előfeltétele a legfélelmetesebb.

Termelékenyebb módon végrehajtani webes szolgáltatások használata a WebMethods Microsoft ASP.NET shell. Az ASP.NET jön IHttpHandler különleges osztály .asmx (ún WebServiceHandler), amely egy sor alapvető funkciókat funkcionális XML, XSD, WSDL és SOAP. És, mint WebMethods héj védi meg a bonyolult mögöttes XML technológia, akkor gyorsan összpontosítani a meglévő problémákat az üzleti logika.


1. ábra közti kompromisszumok rugalmasság és a termelékenység

Közötti választás a technikát a felismerés vezet átfogó összehasonlítást a nyereség és veszteség a rugalmasság és a hatékonyság tekintetében az 1. ábrán látható Hozzon létre egy egyéni IHttpHandler ad korlátlan rugalmasságot, hanem több időt igényel, hogy írjon, teszt és hibakeresés. WebMethods shell elősegíti a szervezet a Web szolgáltatás és a sebesség a fejlődés, de egyértelműen korlátozza a shell. Azonban azokban az esetekben, amikor a WebMethods héj nem biztosít, amire szüksége van, lehetőség van, hogy azt meghosszabbítják hozzáadásával saját további szolgáltatásokat.

WebMethods héj foglalkozik átalakulás SOAP üzenetek a .NET osztály módszerek. Ezt főleg a magyarázó a módszerek tulajdonítják [WebMethod] található, a tér System.Web.Services neveket. Például, a következő osztály .NET tartalmaz négy módszer, melyek közül kettő annotált attribútum [WebMethod]:

Ahhoz, hogy használni ezt az osztályt WebMethods shell, meg kell lefordítani egy szerelvény, és másolja a virtuális könyvtár bin könyvtárba. Ebben a példában az összeadási és kivonási módszerek azután ismertetik Web Service műveletek, míg a módszerek szorozni és osztani ezt meg lehet tenni (mert nincs megjelölve tulajdonság [WebMethod]).

Megnyitja a összeadni és kivonni műveleteket, mint egy webes szolgáltatás révén .asmx fájlt. Ehhez hozzon létre egy új szöveges fájlt Math.asmx, amely az alábbi egyszerű leírást, és helyezze el ugyanazt a virtuális könyvtárat, ahol a szerelvény (megjegyzés: a fájl kerül a virtuális könyvtár is, mint a leányvállalata könyvtár bin):

Ez az egyik legfontosabb beállítások az .asmx kezelő. Fájl .asmx leírás rendszerint tartalmaz egyetlen WebService, arra utal, hogy a webszolgáltatás osztály nevét (mint az alábbi példában). Ezért ebben az esetben a szerelvény kell már össze és helyezzük a bin könyvtárban a virtuális könyvtár. Processzor .asmx továbbá JIT összeállítás a forráskód a .asmx fájlt. Például a következő kép (ún Mathjit.asmx) tartalmaz WebService leírás együtt az eredeti osztály hivatkozott kód.

Ha ez a fájl dostupayutsya HTTP-n keresztül az első alkalommal, .asmx felvezető forrást fordítja, és helyezze a szerelvény rendesen. Megjegyezzük, hogy a leírás WebService is meg kell határozni, és programozási nyelv .asmx kezelő kiválaszthatja a megfelelő futási fordító. Egyértelmű hátránya ennek a módszernek, hogy nem tudni, hogy fordítási hibákat, amíg a kapcsolati fájlt.


2. ábra dokumentáció MathService

Amikor egy új webes szolgáltatás projectet Visual Studio .NET, akkor mindig a technikát „két fájlt”, amikor a forrás file osztály elkülönül a .asmx fájlt használ, amely azt. Integrated Development Environment (IDE) jó bujkál tőled, de ha a Minden fájl megjelenítése a Solution Explorer eszköztár, látni fogja a projekt a két fájl az egyes webes szolgáltatási osztály. By the way, a Visual Studio .NET nem támogatja fájlok .asmx szintaxiskiemeléssel vagy IntelliSense®, így eldöntheti, hogy követik-e ebben az irányban. A Visual Studio .NET Web projektek is aggasztja létrehozását egy virtuális könyvtár, és automatikusan összeállítja az egységet a bin virtuális könyvtár.

Mielőtt búvárkodás a részleteket a munka .asmx felvezető, nézzük röviden megvitatják, hogyan üzeneteket kezelik Internet Information Server (IIS), elsősorban a .asmx felvezető. Amikor egy bejövő HTTP üzenet eléri a 80 portot, annak érdekében, hogy meghatározza, mely ISAPI- DLL kell használni a folyamat az IIS az IIS Metabase információkat. Szerelési .NET csatlakozik tágulási .asmx aspnet_isapi.dll, amint a 3. ábrán látható.


3. ábra Svyazyvaenie IIS és .asmx

Aspnet_isapi.dll - ez egy ISAPI kiterjesztése a szabvány által szolgáltatott .NET Framework, amely egyszerűen irányítja a HTTP kérések egyetlen munkafolyamatban, az úgynevezett Aspnet_wp.exe. Aspnet_wp.exe befogadóként működik a közös nyelvi futtatókörnyezet és a .NET HTTP gázvezeték. Ha egy üzenet tartalmazza a .NET HTTP csővezeték, csővezeték néz a konfigurációs fájlban, amely osztály IHttpHandler kell használni ezt a kiterjesztést. Ha megnézzük a fájlt a Machine.config, látni fogja, hogy tartalmazza httpHandler, kapcsolódó mellék .asmx, mint itt látható:

Közvetlenül azután, hogy a .NET HTTP csővezeték okozza .asmx felvezető csodálatosan kezdődik feldolgozása XML, XSD, WSDL és SOAP. Hátralévő funkcióit felvezető .asmx, akkor lehet osztani három fő csoportra: 1) koordinálja kommunikáció 2) XML átalakítása tárgyak, és 3) automatikus generálása és WSDL dokumentumot. Nézzük ezt a két csoportot, hogy egy közelebbi pillantást.
dispecherizacii üzenete

Amikor a HTTP csővezeték okozza .asmx felvezető keres WebService leírást a .asmx fájlt, ez határozza meg, hogy használja-e a .NET osztály. Akkor úgy néz ki, a bejövő HTTP üzenetet, hogy melyik módszer a nézőtér ebben az osztályban. Hogy ki az Add látható művelet az előző példákban, a bejövő HTTP üzenetet kell kinéznie:

Tény, hogy van két szakasz a bejövő HTTP üzenet, amelyet fel lehet használni, hogy meghatározza a módszert, hogy fel kell hívni az osztály: SOAPAction mûködését vagy a nevét a kért elem (azaz az elem nevét elemen belül szappan: Body). Ebben az esetben legalább egyikük meghatározza a módszer neve is azt akarja, hogy hívja a feladónak.

Meg lehet változtatni a tér Web szolgáltatás neve, a jelölést a class attribútum a [WebService], valamint a pontos értékét SOAPAction, jelölés WebMethods tulajdonság [SoapDocumentMethod], az alábbiak szerint:

Ha .asmx felvezető nem találja el a SOAPAction, amely alkalmas a beérkező HTTP üzenet, csak egy kivételt dob ​​(később, hogy hogyan kezelik kivételek). Ha dispecherezatsii módszer nem használ SOAPAction mûködését jelölés osztályú ingatlanok RoutingStyle tulajdonság [SoapDocumentService], megadhatja a felvezető .asmx használat keresett elem nevét. Ha ezt megteszi, akkor is meg kell adnia, hogy a WebMethods nem igénylik a SOAPAction érték beállításával értékeiket az üres string, az alábbiak szerint:

Tehát az első dolog, ami az .asmx felvezető a bejövő HTTP üzenet - ez határozza meg, hogyan kell átirányítani az üzenetet a megfelelő WebMethod. Mielőtt azonban ténylegesen hívja a módszer, meg kell alakítani a bejövő XML .NET objektumokat.
Konvertálása XML objektumok

Amint a felvezető WebMehod melyik módszert meg kell hívni, meg kell deserialize XML üzenetet a .NET objektumokat lehet biztosítani idején a módszer hívás. Csakúgy, mint a dispecherizacii üzenetkezelő ellenőrzi az osztály segítségével reflexió hogy kitaláljuk, hogyan kell kezelni a bejövő XML üzenetet. Class XmlSerializer automatikus konverzióra között XML és a tárgyak térbeli System.Xml.Serialization neveket.

XmlSerializer lehetővé teszi, hogy átalakítsa bármilyen köz- .NET XML-séma és típusát azonban magatartása automatikus konverzió A tárgyak és a .NET XML dokumentumok (lásd. 4. ábra). XmlSerializer csak azok jellemzői, hogy ma támogatja az XML-séma, ezért nem működnek a bonyolult mai tárgy modellek, mint például a komplex nem fa diagramok tárgyak, ismétlődő mutatók, stb Ennek ellenére a XmlSerializer tudja kezelni a komplex típusú fejlesztők használják.

A fenti példában hozzáadása XmlSerializer konvertálja az X és Y a .NET kettős értéket, amelyet azután kell adni a hívást hozzáadása. Az Add metódus visszaadja a hívó félnek, hogy egy dupla értéket, amely azután ismét sorozatban XML elem a SOAP válasz.


4. ábra XML konverzió tárgyak

Szintén XmlSerializer automatikusan működni komplex típusú (kivéve a korlátozásokat lásd fent). Például a következő WebMethod kiszámítja a távolságot a két pont szerkezetek:

SOAP kérés üzenetet erre a műveletre tartalmaz Távolság elemet, amely magában foglalja a két gyermek elemek, orig és cél, és minden egyes ilyen elemek tartalmaznia kell a gyermek elemek x és y:

Ebben az esetben, SOAP válasz üzenet tartalmazni fogja DistanceResponse elem, amelyben egy kettős típusú elem DistanceResult:

Az alapértelmezett XML átalakítási módszert használja a nevét, mint a neve a lekérdezés elem és paraméter nevek, mint a nevét a gyermek elemek. A szerkezet egyes paraméter függ a szerkezet típusától. Nevek nyilvános területeken és tulajdonságai egyszerűen átalakítható a gyermek elemek, mint abban az esetben az x és y (Pont). Tagja lesz az alapértelmezett név válasz kérés elem neve végződik „válasz” szót. válasz elemet tartalmaz továbbá egy gyermek nevezett elemek, valamint a kérelem elemeit, véget egyetlen szó „eredmény”.

Lehetőség van, hogy megszabaduljon a szabványos XML konverzió használata által a nagyszámú beépített konverziós attribútumok. Például a tulajdonság [XmlType] lehet átalakítani a típus neve és névtér. Szabályozni, milyen paraméterek az osztályon vagy átalakítani elemek és attribútumok, akkor használhatja az attribútumokat [XmlElement] és [XmlAttribute], ill. És figyelemmel kíséri, hogy a módszer maga átalakul a nevét az üzenetben egy kérés / válasz, akkor a tulajdonság [SoapDocumentMethod]. Például, olvassa el a következő verzió a távolság, amely kihasználja a különböző tulajdonságok:

Ebben a változatban a távolsága az várható, hogy a bejövő SOAP üzenet a következőképpen néz ki:

És egy ilyen válasz SOAP üzenet jön létre:

Végrehajtása érdekében, és meghatározza az átalakulás a fenti, az alapértelmezett, .asmx felvezető használja document / literal stílusú SOAP. Ez azt jelenti, hogy a WSDL leírást tartalmaz alfabetikus definíció XML séma és a Query leírni elemek és a válasz elemeit használják SOAP üzenetek (SOAP azaz kódolási szabályok nem használják).

Szükség van továbbá a deserialization paraméterek .asmx felvezető is deserialize / sorosításához SOAP fejléceket. SOAP fejlécek feldolgozása nem paraméterként, mivel azok általában úgy, hogy független információk közvetlen utalás nélkül, hogy egy adott módszer. Ezért a fejléc feldolgozást többnyire keresztül a lehallgatás szinten, teljes körű védelme WebMethods kelljen foglalkozni feldolgozásával fejléceket.

Mindazonáltal, ha a használni kívánt fejléc információ a WebMethod, meg kell adnia egy .NET osztály örökli a SoapHeader, amely XML sémafejléceket (konverziót követően a fenti ajánlások). Akkor típusának meghatározására a tag változó szerepét betöltő „helykitöltő” például fejlécet. Végül ki kell jelölni a WebMethod minden, hozzá kell férniük a címet, nevének megadásával a területen, ahol a küldeni kívánt.

Például SOAP kérés tartalmazó UsernameToken fejléc hitelesítésére:

Annak érdekében, hogy lehetséges, hogy a .asmx felvezető fejléc deserialization, akkor először meg kell meghatározni a .NET osztály, amely képviseli a tervezett típusú XML-séma (megjegyzés: ha valóban van egy XML-séma a fejléc, akkor létrehoz egy osztály segítségével xsd.exe / c) . Ebben az esetben, a megfelelő osztály az alábbiak szerint:

Akkor csak meg kell határozni egy változó tagja az osztályban WebMethod, hogy tárolja egy példányt osztály címét. és jegyzetekkel WebMethods attribútum [SoapHeader], az alábbiak szerint:

.asmx felvezető felül az automatikus sorszámozás .NET kivételes helyzetekben. Bármilyen kezelt kivétel, elfogott .asmx felvezető, akkor automatikusan sorba be SOAP Fault elem a választ. Például az előző példában, ha a felhasználó neve nem egyezik meg a jelszót, a kódunk kivételt dob ​​.NET. Akkor .asmx felvezető feldolgozza azt, és a szerializált a SOAP válasz az alábbiak szerint:

Ügyfeleink pontosan tudniuk kell, hogyan kell kinéznie egy SOAP üzenetet annak érdekében, hogy sikeresen együtt dolgozni vele. Ez a közös leírást adnak a webszolgáltatás keresztül WSDL (és beágyazott XSD definíciókat). Erre .asmx felvezető és automatikusan generál dokumentációs oldal, és a WSDL leírást, amely pontosan tükrözi a WebMethod felületen. Ha alkalmazott csoport átalakítási attribútumokat a WebMethods, akkor tükröződik a létrehozott dokumentációt.

Ha megnézzük .asmx fájlt, meg fogja találni egy oldal dokumentációt, mint például a 2. ábrán látható Ez a kézikönyv lap keletkezik .aspx oldalon, az úgynevezett DefaultWsdlHelpGenerator.aspx (a C: windowsMicrosoft.NETFramework v1.0.3705config). Ha megnyitja a fájlt, akkor láthatjuk, hogy ez csak egy szokásos ASP.NET oldalt használó .NET reflexió generál dokumentációt. Ez a funkció lehetővé teszi a dokumentumok mindig felelnek meg a kódot. Egyszerűen módosításával ezt a fájlt, akkor lehet módosítani a létrehozott dokumentációt.

Azt is blokkolja a generációs dokumentáció alapján a virtuális könyvtár, meghatározva az egyéb dokumentációt a Web.config fájlban:

Ha egy ügyfél befejezi a GET kérést az .asmx szimbólumok „? WSDL” a lekérdezési karakterlánc helyett .asmx felvezető generálja a WSDL leírást a dokumentáció. Ügyfeleink használhatják a WSDL leírás generálni proxy osztály, amely automatikusan tudja, hogyan kell kommunikálni a webszolgáltatás (azaz a Wsdl.exe .NET).

Két különböző technikákat, akkor teljesen elzárja a WSDL folyamat. Először is, a fogyasztókhoz való hozzáférés, akkor a statikus WSDL dokumentum a virtuális könyvtárba, majd blokkolja a dokumentáció generátor, eltávolítja a fájlt a Web.config, az alábbiak szerint:

WebMethods ASP.NET kabát egy nagy teljesítményű megközelítés kiépítése webes szolgáltatások. WebMethods lehetővé tette, hogy a hagyományos módszerek, mint a .NET webes szolgáltatás műveleteket, amelyek támogatják a HTTP, XML, XML-séma, SOAP és WSDL. Handler WebMethod (.asmx) automatikusan meghatározza, hogyan kell elküldeni a bejövő SOAP üzeneteket a megfelelő módszer, ekkor az automatikusan serializes bejövő XML elemeket a megfelelő .NET objektumokat. És egyszerűsítése az élet a kliens, a felvezető .asmx is biztosít automatikus támogatása generáló dokumentációt annak a személynek (HTML) és a gép (WSDL).

Értékelés: 2 február 5

Kapcsolódó cikkek