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