Creați un serviciu web autonom în Delphi 7 utilizând india

Din acest raport putem concluziona că TSoapConnection conexiune devine întotdeauna interfață IAppServer TSoapDataModule a modulului, indiferent de numele interfeței specificate pentru un anumit indicator URL. În primul rând, trimiterea se face folosind operațiuni SOAPAction, dar în caz de eșec, în final se va utiliza indicatorul URL. Interfață IAppServer trimis întotdeauna înapoi la aplicația client, iar proiectantul a interfeței este primul modul de date înregistrate (cel mai probabil, acest lucru se datorează faptului că SDM-unitate se deplasează în Delphi-proiect înainte de celelalte module conduce la o schimbare a furnizorului de servicii).







Este recomandat să încercați să reproduceți situația descrisă mai sus înainte de a trece la soluția discutată mai jos. Acest lucru vă va ajuta să vă familiarizați cu alte tehnici utile.

În primul rând, trebuie să creați un nou mod standard, sistemul DataSnap Web-service-ului (Dosar-> New-> Altele, WebServices, apoi selectați Application Server SOAP). Aplicația SOAP va fi creată ca executabil de către serverul Web App Debugger, cu numele clasei (Class Name) TheThreeSDMs. În prezent, nu este nevoie să creați nicio interfață suplimentară.

Acum că există un cadru server SOAP, trebuie să adăugați trei module de date SOAP. În acest articol se numesc SDM1, SDM2 și SDM3. Pentru fiecare modul de date, trebuie să specificați parametrul care definește furnizorul de servicii. Apoi, vor fi utilizate trei seturi de date ClientDataSets, iar unele date din baza de date MyBase vor fi încărcate și vor fi adăugate unele componente TDataSetProviders. Acum există un server SOAP valabil și trebuie să executați acest proiect cel puțin o dată pentru al înregistra pe serverul WebApp Debugger. După aceasta, trebuie să acordați atenție limbajului WSDL generat pentru acest serviciu.

Rulați timpul, proiectați timpul ... Lucrul nu merge niciodată așa cum ne-ar plăcea. Și aș vrea doar să utilizez pointerul URL, nu proiectantul interfeței IappServer. Cum putem realiza acest lucru? Pentru a răspunde la această întrebare, este important să înțelegem esența problemei în sine. Rețineți că în Delphi 7 există o proprietate SOAPServerIID pentru conectarea TSoapConnection. Este întotdeauna setat la "IAppServerSOAP -". Această valoare poate fi schimbat, dar apoi proprietatea conectat nu poate fi setată la True (puteți face acest lucru dacă specificați valoarea False pentru UseSOAPAdapter, dar are ca rezultat o interfață de apel IAppServer în schimb IAppServerSOAP, noua interfață a introdus în Delphi 6). Privind modulul SOAPConn, veți observa că, cel mai probabil, nu există crearea principalei componente RIO. În același timp, dacă vă uitați la versiunea demo a modulului SOAPDataModule, puteți vedea că este posibilă modificarea proprietății SOAPServerIID. Cu toate acestea, în cazul de față, trebuie să puteți importa limba serverului WSDL și, în plus, acest lucru duce la pierderea unui număr de caracteristici în timpul perioadei de proiectare.







Soluția propusă se bazează pe o înțelegere a modului în care conexiunea TSoapConnection primește informații, în funcție de interfața modulului de date SOAP. Pe partea de server, interfața este de obicei înregistrată utilizând modulul InvokeRegistry. În timpul importului de WSDL, ca și în versiunea demo, se înregistrează în aplicația client folosind modulul InvokeRegistry. Acest lucru este de a se asigura că, în timpul compusul alerga TSoapConnection ar putea găsi interfața corectă pentru cereri de servicii la serviciul (în cazul versiunii demo este interfața IDataMod). Cu toate acestea, acest lucru duce la pierderea unor oportunități în timpul perioadei de proiectare. Apoi, vom examina cum să depășim această problemă, care pare a fi singurul obstacol în atingerea scopului acestui articol. Dacă vă gândiți bine, această problemă nu este atât de complicată. IDE nu știe nimic despre cum să invoce secțiunea de inițializare a modulelor proiectului curent, astfel încât în ​​timpul proiectarea interfețelor de module InvokeRegistry absent. Soluția la această problemă este de a crea un pachet special pentru perioada de proiectare cu un modul care conține interfețele descendente (cum ar fi ISDM2).

Deschideți din nou proiectul serverului și adăugați un nou modul numit uTheThreeSDMsIntf. În primul rând, trebuie să fuzionați toate interfețele SDM ale serverului în acest modul și să setați instrucțiunile clauzelor de utilizare ale fiecărui modul SDM pentru a utiliza noul modul de interfață. În plus, apelul de serviciu trebuie să fie transmis funcției InvRegistry.RegisterInterface () pentru a apela secțiunea de inițializare a noului modul. Mai jos este codul corespunzător pentru modulul uTheThreeSDMsIntf.







Trimiteți-le prietenilor: