Létrehozása egy önálló web-szolgáltatás a Delphi 7 egy sor indy

Ebben a jelentésben arra lehet következtetni, hogy a kapcsolat TSoapConnection mindig megkapja IAppServer TSoapDataModule interfész modul, függetlenül a felület nevét megadva egy adott URL-mutatót. Először is, egy referencia segítségével SOAPAction műveleteket, de ennek hiányában, a végén, akkor használja az URL-mutatót. Interface IAppServer mindig visszaküldik a kliens alkalmazás, és a tervező az interfész az első rögzített adatok modul (valószínűleg ez annak a ténynek köszönhető, hogy az SDM egység mozog Delphi-projekt előtt, a többi modul változásához vezet a szolgáltató).







Javasoljuk, hogy megpróbálják reprodukálni a fent leírt helyzet, mielőtt a megoldás az alábbiakban ismertetjük. Ez segít, hogy megismerjék más hasznos technikákat.

Először létre kell hoznia egy új szabvány, ahogy a Web-service-kompatibilis DataSnap rendszer (File-> New-> Egyéb webszolgáltatások, majd válassza SOAP Server Application). SOAP-alkalmazás létre, fájlszerver futtatható Web App Debugger, a nevét az osztály (Class Name) TheThreeSDMs. Abban a pillanatban, hogy nem szükséges, hogy bármilyen további felületen.

Most, ha van egy SOAP szerver keret, meg kell adni a három modul SOAP adatok modul adatokat. Ebben a cikkben, hívják őket SDM1, SDM2 és SDM3. Minden egyes adat blokkot be kell állítani a paraméter meghatározza a szolgáltató. Továbbá három ClientDataSets adatokat kell használni, és be fogja tölteni néhány adatot az adatbázisból példák MyBase és hozzáadott néhány TDataSetProviders alkatrészeket. Most van egy érvényes SOAP szerver és meg kell futtatni a projekt legalább egyszer annak érdekében, hogy regisztrálja a WebApp Debugger szerver. Ezt követően, akkor kell figyelni, hogy a WSDL keletkezett a szolgáltatást.

futási idő, design munkaidő ... soha nem megy az út szeretnénk. És szeretnék egyszerűen használja a mutató egy URL-t, és nem a kivitelező IappServer felületen. Hogyan lehet ezt elérni? A kérdés megválaszolásához fontos megérteni a probléma lényegét. Meg kell jegyezni, hogy a Delphi 7 ott SOAPServerIID -nak TSoapConnection kapcsolatot. Mert ez mindig „IAppServerSOAP -”. Ez az érték lehet változtatni, de aztán a Connected tulajdonság nem lehet True (ezt megteheti, ha megadja False érték UseSOAPAdapter, de az eredmény egy hívás IAppServer felület helyett IAppServerSOAP, az új felület bevezetett Delphi 6). Keresi SOAPConn modullal, akkor látható, hogy a legvalószínűbb, nincs megteremtése a fő RIO-komponenst. Ugyanakkor, ha megnézi a demo SOAPDataModule változata a modul látható, hogy lehetséges, hogy változtatni tulajdonságait SOAPServerIID. Azonban ebben az esetben van szükség, hogy képes importálni a WSDL a szerverről, és ezenkívül, ez vezet a veszteség több lehetőséget a tervezési időszakban.







A javasolt megoldás alapja annak megértését, hogyan TSoapConnection kapcsolat lesz alapuló információkat SOAP interfész adatok modult. A szerver oldalon interfész jellemzően felvett InvokeRegistry modul. A WSDL import, valamint a demo verzió, akkor regisztrálja magát a kliens alkalmazás is használ InvokeRegistry modult. Ez biztosítja, hogy a futás közben TSoapConnection vegyület képes megtalálni a megfelelő felület szolgáltatási kérések a szolgáltatás (abban az esetben a demo verzió IDataMod interface). Azonban ez vezet a veszteség néhány jellemzője a tervezési időszakban. Következő lesz szó, hogyan kell leküzdeni ezt a problémát, amely úgy tűnik, hogy az egyetlen akadály a célnak az eléréséhez ezt a cikket. Ha ez jó, hogy úgy gondolja, hogy ez a probléma nem olyan bonyolult. IDE semmit nem tud arról, hogy hogyan hivatkozhat az inicializálási szakaszban a modulok az aktuális projekt, úgyhogy tervezése során a modul interfész InvokeRegistry hiányzik. A megoldás az, hogy egy időszak tervezéséhez speciális csomag modul, amely tartalmaz egy leszármazottja interfészek (például ISDM2).

Nyissa meg újra a Server projekt és egy új modult nevű uTheThreeSDMsIntf. Először meg kell kombinálni az összes szerver SDM-interfészek ebben a modulban, és kérje az üzemeltető kikötés egyes SDM-modul, hogy az új modul interfész. Ezen túlmenően, a szolgáltatáshoz való hozzáférésnek InvRegistry.RegisterInterface () függvények át kell tenni az új hívást modul inicializálása részben. Az alábbiakban a megfelelő kódot uTheThreeSDMsIntf modult.