SOAP komponensek Delphiben (Simple Object Access Protocol) Bevezetés -Azegyszerűen programozható webhozzáférés azt jelenti, hogy a fejlesztők saját programjukat a weben elérhető szolgáltatásokból építik fel komponensről - komponensre. - A már megírt kódokat felhasználhatjuk, beépíthetjük programunkba bizonyos feltételek mellett. A webszolgáltatás egy szabványos webprotokollon elérhető, programozható logika. Ez a rövid,, de pontos definíció határozza meg az összes szempontot, ami mérvadó egy ilyen program elkészítésénél: 1. Platform- és nyelvfüggetlenség: - az adatok kezelése gép- és operációsrendszer függő ( tetszőleges programozási nyelvben használhatók). 2. Szabványosság: - olyan felületet kell biztosítani a felhasználók számára, ami támogatja az egységes adatreprezentációt. 3. Elérhetőség: - a kommunikációra használjunk fel egy olyan nyelvet, melyet minden géptípus ismer és elfogad. Alkalmazott protokollok 1. XML (extensible Markup Language) - Az XML biztosítja az egységes adatrepre- zentációt a különböző platformokon. - Szövegesen ábrázolja az adatokat. Egy webszolgáltatásban minden XML nyelven történik: - a kommunikáció egyes szereplők között, - az adatok egységes kezelése, - a konfigurációs állományok beállításai. 2. SOAP (Simple Object Access Protocol) A SOAP egy alkalmazás rétegbeli protokoll, mely felhasználja a HTTP réteg szolgáltatásait. Ez egy ajánlás, mely: 1. Általános leírást ad az adatok kézbesítésére XML dokumentumként. 2. Leírja a webszolgáltatásban szereplő egyszerűbb és összetettebb adattípusainak használatát és az azoknak megfelelő üzeneteket. 3. Megfogalmazza a HTTP-re történő leképezés szabályait. 3. WSDL (Web Service Descriptor Language) A WSDL egy jólformált XML dokumentum, melyben szerepel: - a szolgáltatás által elvégezhető műveletek listája - elvégzésük módja. A WSDL tartalmazza: - az adattípusokat, - az üzenetek struktúráját, - az operációkat, - a protokoll kötéseket, - a címeket és a szolgáltatásokat 1
4. UDDI (Universal Description, Discovery and Integration) Ez egy nyilvántartás, könyvtár, ami adatokat tartalmaz cégekről, és az általuk nyújtott webszolgáltatásokról. Ez z is XML-alapú alapú, ami megkönnyíti a kommunikációt és egységesíti a lekérdezéseket. Ezt a nyilvántartást, megírt programunkból SOAP protokollon keresztül érhetjük el. SOAP Szerver létrehozása Elsősorban el kell indítani a Delphi 7 t, majd File -> > New -> > Other menüpontban ki kell választani a Web Services filet, majd a SOAP Server Applicaton t, amint ezt az alábbi ábra is mutatja : A megjelenő World Wide Web szerver-applikációk közül ki kell választani egyet. Legyen ez most a CGI Stand-alone alone executable a felsoroltak közül, habár sokkal ajánlottabb egy Apache vagy ISAPI/NSAPI DLL t választani, mert hatékonyabb. Egy új SOAP Szerver Applikáció és SOAP WEB Module generálódik és egy kérdés jelenik meg : Akarunk-e interfészt a SOAP modulunkhoz? Kisseb szerver esetén célszerű NEM el válaszolni, komoly szerver esetén jobb ha interfész is van. Válasszuk most tehát a YES t t : Ezzel létrejött a SOAP Web Module, amely máris három komponenst tartalmaz : -THTTPSoapDispatcher -THTTPSoapPascalInvoker -TWSDLHTMLPublish 2
Ez a három komponens elegendő,, most már a felhasználandó adatbázis tábláira lehet koncentrálni. Mentsük le tehát a SOAP Web Module t, valamint az egész projektet is. Most adjunk hozzá egy újjabb SOAP Data Module t az 1. es pont alapján. A SOAP Data Module Wizard - ban adjunk neki nevet és mentsük le A következőkben az adatbázishoz való kapcsolást kell megvalósítani. Ezt többféleképpen lehet megvalósítani, például ADO, vagy DataSnap és dbexpress segítségével. Ennek megvalósításától most eltekintek. Miután létrehoztuk az adatbázissal való kapcsolatot, mindent le kell ismét menteni és kompilálni kell. A kipróbáláshoz elindítjuk a web szervert, például Xitami,, és a szerverünk.exe fájlját másoljuk be a Xitami CGI-BIN könyvtárába. ába. Ha futtatjuk az.exe fájlt, akkor nem fog történni semmi, hiszen nem hoztunk létre felületet a szerverünknek. A helyes működéshez, írjuk be az explorerbe be,, hogy http://localhost/cgi-bin/ bin/szerverneve.exe Ha helyesen működik a szerverünk, akkor egy, az alábbihoz hasonló ábrát kell kapjunk : SOAP kliens létrehozása A szerverrel való kapcsolat létrehozásához, elhelyezzünk a kliensen egy TSOAPConnection komponenst a Delphi7 Web Services menüjéből. Állítsuk be az URL tulajdonságot a szerver által definiált URL re és külön jelezzük, hogy SOAP ot használunk, nem pedig WSDL - t. Tehát a TSOAPConnection komponens URL tulajdonsága valahogy így kéne kinézzen : http://192.168.92.201/cgi-bin/szerverneve.exe/soap/iappserver ha IP címet használunk, vagy pedig: http://localhost/cgi-bin/szerverneve.exe/soap/iappserver SOAP komponensek A SOAP fogalma szorosan összefügg a Web Service fogalmával. Ezért Delphi 7 ben a SOAP komponenseket a Web Service file alatt találjuk meg, az alábbi sorrend szerint : Tehát a SOAP klienset et az URL segítségével irányítom a szolgáltatás felé, onnan egy magasszintű API továbbítja a részleteket. 3
THTTPRIO Statikusan összekötött hívásokat generál, hogy segítségül hívjon interfészeket egy távoli Web Service applikációtól. Ez egy dinamikus metódustáblát generál amit a belső memóriában tárol. A metódusokat ebből a táblából hajtja végre,, SOAP kérésként kódolva a metódust és HTTP kérésként küldi el az üzenetet. Kicsomagolja a HTTP válasz üzenetet, hogy megkapja a visszatérített értéket vagy, hogy egy kivételt hozzon létre ha az elküldött üzenet kivételévelt képezett a szerveren. A szerverrel való kapcsolat kétféleképpen valósítható meg : - vagy az URL tulajdonságban adjuk meg a szerver címét - vagy ha WSDL dokumetummal akarunk kapcsolatba lépni, akkor a WSDLLocation tulajdonságot kell beállítani. Ebben az esetben a Service és Port tulajdonságokat is ki kell tölteni. THTTPReqResp Ha proxy szervert akarunk használni, akkor ezt a komponenst kell használni. Ugyanakkor ez végzi el a THTTPRIO által kért metódust úgy, hogy két parancsot képes kiadni : - GET kérést egy WSDL dokumentumhoz - POST kérést ahhoz, hogy a metódushívást továbbítsa a szervernek elvégzésre és hogy visszaszolgáltassa a választ. Windows alatt ez a komponens a WININET.DLL t használja a szerverrel való kapcsolat létrehozására. TOPToSoapDomConvert Kezeli a rendezett és nem rendezett SOAP metódushívásokat. Az applikációk általában ezt nem használják közvetlenül. A THTTPRIO használja inkább a kliensen, valamint a THTTPSoapPascalINVOKER vagy a THTTPSoapCppInvoker a szerveren. Ha a metódushívás kivétellel ér véget, akkor hibacsomagot generál. TSOAPConnection Egy többrétegű applikáció kliens részében használjuk. Segítségével létrehozzuk és fenntartsuk a kapcsolatot egy távoli szerverrel. A TSOAPConnection egy interfészt is szerezhet a szervernek (IAPPSERVER vagy IAPPSERVERSOAP) Ha DataSnap komponenseket is használunk, akkor ez nem lehet IAPPSERVER. Egy másik célja ennek a TSOAPConnection komponensnek, hogy egy szolgáltatói listát is kérhet a szervertől. Ha meg akarjuk szüntetni a szerverrel a kapcsolatot, akkor szintén ezt a komponenst kell használjuk. THTTPSOAPDispatcher Válaszol egy SOAP üzenetre továbbítva azt egy segítőnek, hogy értelmezze. A segítőt a Dispatcher tulajdonságban kell megadni. 4
TWSDLHTMLPublish Publikál egy WSDL dokumentumlistát ami a WebService applikációt írja le. Az applikáció metódusait és annak paramétereit teszi közzé (így mások is használhassák a WebService t). Alapértelemben ott fogja publikálni a dokumentumlistát. Azonban ezt meg lehet változtatni az AdminEnabled tulajdonságban, majd a WSDL administratort kell elindítani, hogy webkeresővel megadjuk az új címet. THTTPSOAPPascalInvoker Értelmezi a SOAP kérést és végrehajtja a megfelelő segítségül hívott interfészt. A SOAP kérést egy THTTPSOAPDispatcher től kapja, elemzi, majd egy közeli hívást generál egy regisztrált, segítségül hívott interfésztől. Használja az InvocationRegistry t (INVREGISTRY), hogy eldöntse a bejövő SOAP kérés megfelel-e egy már regisztrált, segítségül hívott interfésznek (invokable interface). C++ ban a THTTPCppInvoker a megfelelője. Összefogalalás Az eljárások weben keresztüli integrációja kulcsfontosságú. Az XML és HTTP engedélyezi ezt a technológiát,, a SOAP pedig definiálja a kódolási sémát. A WSDL leírja a szolgáltatást, az UDDI pedig hírdeti. A SOAP definiál : - egy kódolási stílust, amely XML t használ ahhoz, hogy bemutasson információi gráfokat. - egy standard utat arra, hogy XML t HTTP re vigyen át - szabályokat üzenetek átadására XML dokumentumként - hibákat - egy médiumot, hogy teljesítse az RPC parancsokat - egy réteget egy többréteges alkalmazásban - boríték fogalma ahhoz, hogy nagyobb méretű adatot is továbbítsunk 5