Delphi SOAP + IBQuery komponens hiba


Ez a téma lezárásra került a moderátor által. A lezárás oka: Végtelen örömmel töltene el bennünket, ha nem "rondítanál" bele más - pláne már lezárt - témájába, hanem új témát nyitnál a saját problémádnak.  Írtam egy webservice-t Delphi 2009-ben, ami eddig tökéletesen működött a Web App Debugger használatával, de miután átírtam CGI exe-re vagy ISAPI dll-re, a Webmodule-on lévő IBQuery komponens access violation hibával elszáll mikor meghívok egy függvényt wsdl linken keresztül.
Kipróbáltam, ha csak pl egy összeadást csináltatok azt szépen megcsinálja és vissza is adja az eredményt a kliensnek, de adatbázisból kellene dolgoznom és nem értem, hogy mi a baj, hiszen a Web App Debugger-rel működött.
Feltettem az Eurekalog log fájl ide, hátha abból lát valaki valamit: log fájl
Amit én kitudtam belőle bogarászni, mintha ez lenne a hiba, de lehet hogy tévedek és nem értem mi köze van a Query komponenshez: OPToSOAPDomConv.TOPToSoapDomConvert.ProcessFault |
| Kipróbáltam DBExpress-el is, ugyanaz a hiba. |
WSDL-t be tudod importálni a kliensbe?
A query-t hova raktad, data modulra?
Ha mutatsz valami kódot akkor többet tudunk segíteni... |
Szia!
A wsdl link működik a böngészőben, látszanak a függvények is és a kliens-el tudok lekérdezést is csinálni, de csak olyan függvényt tudok meghívni a szerveren ami nem használ komponenst.
A Query komponenst a webmodule-ra raktam, és úgy nézem az lehet a baj, hogy ezeket nem éri el az implementációs részben lévő függvény valamiért.
Próbáltam sima datamodule-t is létrehozni és arra pakolni komponenseket, de azzal meg lefagy az egész szerver.
Az implementációs részben így szerepel egy query hívása:
function TWebShop.stock(cikksz: integer): integer;
begin
.
.
Webmodule.IBQuery.SQL.Add('SELECT * FROM...');
.
.
end |
Ez így még mindignem túl sok...
Szerintem próbáld meg, hogy a csinálsz egy SOAP servert (ne sima webservert) és ahhoz tudsz SOAP server data modul-t hozzáadni, amire rá tudod pakolni az adatbázis komponenseket. A kódod maradhat ugyan az...így működnie kell...(nekem legalábbis működik...) |
A feltett EurekaLog az a kliensé, nem sokra megyünk vele, mert a hiba szerver oldalon lép fel és a kliens ezt jelzi felénk. (OPToSOAPDomConv.TOPToSoapDomConvert.ProcessFault)
Szerver oldali EurekaLog kellene.
Mellesleg a TWebShop meg van kreálva? AV tipikusan akkor jön, mikor még meg nem kreált, vagy már felszabadított objektumra hivatkozol. (Vagy tömböt címzel félre, de nem hinném hogy most ez áll fent.) |
| Ja még valami: az adatbázis elérés jól van megadva? Gondolom a WAD-ot a fejlesztő gépeden futtattad, a CGI/ISAPI viszont egy szerveren fut(persze ez lehet ua. a gép is, akkor nem szóltam), vagyis más az adatbázis elérési útvonala... |
Kipróbáltam, amit írtál, teljesen új lappal indítottam. Létrehoztam egy ISAPI SOAP webservice-t majd egy SOAP Datamodult hozááadtam. A datamodulra rápakoltam az adatbázis komponenseket, de az implementációs .pas fájl-ból sehogy sem tudok rá hivatkozni. A webmodule-on lévőkre tudok simán, de ugye akkor jön az access violation hiba.
Részletesebben: A webmodule neve Webmodule2, az implementációs fájl WebShopImpl.pas, a datamodule neve Data.
A WebShopImpl uses részében ott van a UnitData (datamodule) és a UnitMain (webmodule).
Van 1-1 Query mindkét modulon, és ezeket a hivatkozásokat próbáltam a WebShopImpl-ből:
- Webmodule2.IBQuery - Ezt így látja de access violation amikor meghívom
- Data.IBQuery - Undeclared identifier 'Data'
- TData.IBQuery - Method identifier expected
Localhoston tesztelem, az adatbázishoz kapcsolódás rendben van.
A TWebShop szerintem megvan kreálva:
InvRegistry.RegisterInvokableClass(TWebShop);
InvRegistry.RegisterInterface(TypeInfo(IWebShop));
Felraktam a teljes forrást is, hátha az segít:
http://djnice.uw.hu/WebShop.zip (ebben még nincs a SOAP datamodulos rész benne) |
| Amikor új servert csinálsz ne válaszd az automatikus interface létrehozást! Add hozzá a soap data modult, rá a komponenseket és a függvényeidet... |
| Megpróbáltam, ezzel az a baj, hogyha nem csinálok interface-t, akkor a wsdl linken nem jelennek meg a hívható függvényeim. |
Na megtaláltam, az interface rész alá nem tettem be a függvényt.
Próbálom a Query-t. |
Működik! 
Még annyi lenne a kérdésem, hogy az IBDatabase komponensben a kapcsolatot mindenképp aktívra kell állítanom? Mert ahogy nézem, ha a datamodul oncreate eseményében állítom be a paramétereit akkor nem csatlakozik. |
| Szerintem nem (én ADO-val használom és természetesen csak futásidőben kapcsolódok), viszont lehet, hogy az onCreate túl korai neki. Próbáld meg, hogy az első lekérdezés futtatása előtt állítod aktívra... |
| Szia nekem is hasonló a problémám mint amiről beszéltetek, csak én nem ib-vel próbálkozom, hanem ado -val. A datamodulomon van egy adoconn. és egy query összekapcsolva local -ba és minden függyvény megjelenik ami kell. Csak a wsdl importer mindig acces violation-t dob ha be akarom importálni a wsdl-t. tudnátok segíteni? vagy mi lehet a baj? |
Ez a téma lezárásra került a moderátor által. A lezárás oka: Végtelen örömmel töltene el bennünket, ha nem "rondítanál" bele más - pláne már lezárt - témájába, hanem új témát nyitnál a saját problémádnak. |