Szappan - ez csak

SOAP - ez csak

Furcsa módon, de a SOAP (S végrehaj O bject A ccess P kiegészítő jegyzőkönyvét, cross-platform, cross-language technológia indítási objektumok) - ez nagyon egyszerű, de amikor elkezdtem vele dolgozni Delphi, nem tudott rájönni, melyik oldalon neki megközelíteni. Tény, hogy a design SOAP alkalmazások, meg kell felelnie a feltételeknek egy kicsit, és akkor minden jól működik, és ezeket az egyszerű körülmények között, és megpróbálom címét.

Ennek legfőbb feltétele programozás SOAP: a szerver kell hontalan. azaz lekérdezés eredményeként függetlennek kell lennie a korábbi parancsokat kapja meg a szerver. Ez azt jelenti, hogy az összes paramétert az ülés kell tárolni a kliens és a szerver küld a részeként a kérelmet (ha szükséges). Ez biztosítja a magas stabilitás és skálázhatóság a rendszer, bár számos szokásos nyalánkság dvuhzvenki elérhetetlenné válik:
  • nem tudja közvetlenül vezérelni tranzakciók az ügyfél (szerver csinál)
  • illetve nem tudja blokkolni a belépés a szerkesztés (kivéve, hogy a szakterület-zászlók DB)
  • a csapat nem tudja átadni paramétereket, és a másik, hogy fontolja meg az eredményt - ez belül meg kell történnie egy paranccsal
  • nem tud dolgozni egy csomó klasszikus mester darab (de TClientDataset biztosítja ezt a nagyszerű eszközt: beágyazott adatsorok - beágyazott táblázatok)
  • Nem használhatja az ingatlant ClientDataSet.PacketRecords> 0, mivel szerver „nem emlékszik”, hogy ő már túljutott az ügyfél, és hogy - nem, ezt a funkciót kell végrehajtani további lekérdezési paraméterek
  • . mintha elfelejtett valamit - én hozzá később

Egyszerű SOAP-alkalmazás

Ezek a példák tartják az irodalomban a fejlesztési SOAP Delphi.
Fuss Delphi és válasszuk a Fájl | új | Egyéb. . megy a lapra, és válassza WebServices szappan Server Application.

Meg fogják kérni, hogy válasszon a 5 lehetőségből:
  • ISAPI- / NSAPI Dinamic link Libarry - link könyvtár IIS / Netscape szerverek, minden kérést továbbított és feldolgozott mint struktúrát külön téma,
  • CGI önállóan futtatható - egy konzolos alkalmazás, amely kérés érkezik, a szabványos bemenetet, visszaad egy választ a standard kimenetre, minden kérés kezeli külön Például az alkalmazás,
  • Win-CGI önállóan futtatható - Windows alkalmazás, adat útján történik, INI-fájl (nem ajánlott, mint elavult)
  • Apache osztott modul (DLL) - link könyvtár az Apache szerver minden kérést továbbított és feldolgozott mint struktúrát külön téma,
  • WebAppDebugger Végrehajtható - link library hibakeresés kiszolgáló hajók Delphi, mint WebAppDebugger is COM szerver, meg kell adnia a (tetszőleges) CoClass neve a COM-objektum, amelynek révén lesz okozta a webes modul.

Válassza CGI önállóan futtatható, mint a legegyszerűbb a hibakeresés formátum, akkor az alkalmazás könnyen átalakítható más. A trükk az, hogy ha az összes alkalmazási logikát koncentrálódik modulok által írt, te egyszerűen hozzon létre egy új alkalmazás a kívánt típusú csatlakozzunk nimu a modulokat, és ez működik!

Miután az OK gombra kattint, az új alkalmazás jön létre, amely WebModule három részből áll:

  • THTTPSoapDispatcher - fogadja a bejövő SOAP csomagokat, és továbbítja azokat az alkatrész, egyedi diszpécser tulajdonság (jellemzően THTTPSoapPascalInvoker),
  • THTTPSoapPascalInvoker - fogadja a bejövő SOAP kérés találja Fohász Registry nevű módszerrel végrehajt (behívja) generál egy választ, és elküldi azt obrabno THTTPSoapDispatcher,
  • TWSDLHTMLPublish - generál WSDL (W EB S zolgáltatás D olmar L anguage), a leírás adatokat és interfészeket támogatja a modult.

Menteni a kérelmet, akkor a csontváz szerveren.

Töltsünk meg logika. Mivel mind a szerver és a kliens lesz szükség leíró szerkezetek továbbított adatok és interfészek, akkor jobb, hogy azok egy külön modul, és az összes kiszolgáló megoldás - a másik. Ehhez hozzon létre két modul (File | New | Unit), és mentse egyikük néven CentimeterInchIntf.pas. és a többi - CentimeterInchImpl.pas. Belül CentimeterInchIntf.pas írja be az alábbi:

Így már azonosított ICmInch felület, amely két funkciója van: átalakítani centiméter a hüvelyk és hüvelyk centiméter, és a bejegyzett azt InvokeRegistry.

Dolgunk végrehajtását. A CentimeterInchImpl.pas meghatározza leszármazottja TInvokableClass, végrehajtja a felület ICmInch:

Mint látható, már végre a TCmInch mindkét funkció ICmInch interfész, valamint a bejegyzett új invokable osztály InvokeRegistry (általában minden, ami kell továbbítani a hálózaton keresztül kell rögzíteni, kivéve a skalár típus).

WebService Listing

Ha rákattint a WSDL a ICmInch link. mi lesz a teljes leírását, WSDL felület.

Hozzon létre egy új alkalmazást (hagyományos típus), írja a mi részben használja az interfész modul CentimeterInchIntf. helyezni a fő formája a két gomb, beviteli mezők és kétkomponensű THTTPRIO a webszolgáltatások palettán.

K: Mi a teendő, ha a SOAP szerver írta valaki, és nincs az interfész modult?
A: Akkor kell kihasználni Web Service importőr, amely a File | új | Egyéb. . A WebServices fülre. Ez a varázsló létrehoz egy WSDL interfészmodulja szolgáltatás.

Transzfer a komplex típusok

A komponens THTTPSOAPPascalInvoker már tudja, hogyan kell továbbítani skalár típusok és a dinamikus tömböket (az utóbbit kell előzetesen regisztrált InvokeRegistry cm. Alább), de a szállítást a komplex típusú, mint a statikus tömb, felület, felállított rekordot vagy osztály, először meg kell, hogy ezeket az utódai osztály TRemotable. amiért futásidejű típus információ (RTTI). Például, ha azt akarjuk, hogy állapítsa meg egy osztályt, amely visszaadja az arány a deviza és a nevét, a mi interfész modul fog kinézni:

Itt szintén most jelentette be a dinamikus tömb TCurrencyArray, ha azt akarjuk, hogy adja át (vegye figyelembe a különbséget az osztályban, és kitűnő regisztrációs csapatok).
Tény, hogy egy teljes osztály bejegyzését parancsszintaxishoz kissé szélesebb, a látogatók olvasni róla a dokumentációban Delphi:

Megjegyzés: Ha van olyan típus, amely egy WSDL dokumentum egy skalár, de nincs közvetlen levelezés az Object Pascal (például DateTime), majd, mint az alap osztály használandó TRemotableXS, amely kijelenti két módszer XSToNative és NativeToXS átalakítani a húr képviselete az Object Pascal és vissza (ezek a módszerek szükség van, persze, végre).
Ennek része a Delphi jön XSBuiltIns modul, amelyben sok hasznos funkcióval hajtottak végre (de 6.0 verzió voltak hibák a feldolgozó a dátumot, ha a területi beállítások a rendszerben nem voltak angol nyelven).

Érdekes kérdés a teremtés pusztulását a tárgyak átadott paramétereket. Ez az, ami azt mondja, a dokumentáció TRemotable:
„A leszármazottak TRemotable szerver bemeneti paraméterek automatikusan létrejönnek a kicsomagoláskor (unmarshal) metódus hívás, és automatikusan törlésre csomagolás után (marsall) kimeneti paraméterek továbbítására az ügyfélnek.
Leszármazottai TRemotable, belül jön létre a módszer által hivatkozott invokable felület, automatikusan megsemmisül miután értékük csomagolva (marsall) továbbítására az ügyfélnek.
Ügyfél okozó invokable felület, felelős az objektumok létrehozásához használt bemeneti paraméterek, valamint a megsemmisítését leszármazottai TRemotable, amit ő teremtett, valamint adódó módszer hívást. "

Transzfer Adatbázis-a

Itt minden nagyon egyszerű. Bár a projekt Soap szerver alkalmazás, válasszuk a Fájl | új | Egyéb. . megy a lapra, és válassza WebServices szappan Server Data Module. További fejlesztés nem különbözik a hagyományos MIDAS alkalmazás, két jellemzői: a szerver kell hontalan - érkezett kérelem, azt mondta elfelejtett (például CGI modul szó minden hívás után kerül véglegesítésre), és hogy nincs több, mint egy SoapDataModule.
Helyezzük a kapott modul Data Access Components (pl TClientDataset), akkor állítsa be az összes szükséges tulajdonságokat dolgozni. Tedd TDataSetProvider, csatlakoztassa a komponens adatokhoz való hozzáférést.

Skompilliruyte alkalmazására és olyan helyen, ahol lehet futtatni a Web-szerver (valamiért nem tudtam futni alatt WebAppDebugger).

A kliens alkalmazás, amelyet az űrlapon, és TSoapConnection TClientDataset, a SoapConnection.URL adjuk meg az útvonalat, hogy a szerver interfész: akkor egy adott felületen SoapDataModule, és lehet általánosabb - IAppServer. A TClientDataset.RemoteServer pont TSoapConnection. Most, amivel TClientDataset.Active:=true, mi megkapjuk adatokat a kliens.

Amikor ásni adatbázisba a szerver szükséges bizonyos paraméterek, ez lesz kényelmes helyett Előtelepítő: = true használat DataRequest kérelmet. Úgy néz ki, mint ez.
A kliens: A szerveren:

Ha megváltoztatja az adatokat a kliens és szeretné menteni őket a szerver - hívja TClientDataset eljárás ApplyUpdates, csak nem telepíthető TDataSetProvider.ResolveToDataSet = true. Frissítés kérései még ha alkot TDataSetProvider, és ellenőrzése alatt a kialakulását ezeket a kéréseket lehet keresztül TField.ProviderFlags tulajdonságait.

Kíváncsiskodó: formázza az adatcsomag leírt community.borland.com. de a valóságban ez kerül elküldésre bináris (base64Binary) csomag azonos formátumú fájlként (* .cds), a leírás ezt a formátumot nem tudtam megtalálni.
Hogy hogyan kell igazán néz ki a csomagokat hálózaton továbbított, akkor a program tcpTrace. vagy WebAppDebugger-egy szakadékba.

Munka mester-detail

Itt is, minden egyszerű, de - némileg szokatlan, mert része kell átadni a beágyazott táblázat a mester adatbázis, mint mindig mester-részlete egy csomó TClientDataSet lehetetlen. Itt van, hogyan.

A szappan Server Data Module kerül adatállományok a főtábla részleteket, és mint mindig, keresztül kapcsolódnak TDataSource. Ott is tesz egy TDatasetProvider, amely kötődik a főtábla. A szerver össze és elhelyezni, ahol futhat Web-szervert.

A második TClientDataSet (ez lesz a része) egy egységes tulajdonság: DataSetField (válasszon egy nevet a listából az első TDataSetField adatbázisba). Most, ha kombináljuk TClientDataSet-s a rácsok, látjuk adatok - külön főtábla és a részletek.

Van egy másik lehetőség: a mester, és az átadott tétel egyedi adatbázisba, ha ez a tétel van töltve teljesen. és válasszon egy sor részletes nyilvántartást megfelel egy adott vonal mesterek, szűrést alkalmazunk a kliens, de nem lesz probléma egyidejű frissítését a mester és a részletek.

Kiegészítő irodalom tanácsot, hogy vizsgálja meg:
  1. BizSnap fejezete Kylix fejlesztői kézikönyv (különösen alkatrészek 4-6)
  2. InterBase egy Multi-tier Világ
  3. Tervezése ISAPI alkalmazások dolgozni adatbázisok
  4. . és természetesen - RTFM. de a keresés az alábbi fejezeteket valamilyen oknál fogva, a nagy probléma, de az információ segítséget, vannak nagyon részletes,
  5. és - azokat demóalkalmazásokban, hogy jön a Delphi

Javaslatok fejlődését illetően ez a cikk várjuk: [email protected]

Kapcsolódó cikkek