Hallo zusammen,
ich muss auf einen Web Service zugreifen und habe mir dazu mit dem
WSDL-Import die passende
Unit erzeugt. Nun finde ich es vom Design her allerdings äußert unschön, wenn ich mir diese HTTPRIO-Komponente aufs Formular ziehen muss, weil ich sie da eigentlich gar nicht brauche.
Ich wollte das Dingen einfach an der passenden Stelle in der Funktion lokal erzeugen, benutzen und wieder freigeben, wie auch schon hundertfach an anderer Stelle mit anderen Komponenten gemacht.
Mit HTTPRIO habe ich allerdings Probleme. Ich kann die Komponente erzeugen, ich kann sie auch nutzen und bekomme vom Web Service auch das richtige Ergebnis, und freigeben kann ich sie letztlich auch. Wenn dann allerdings die Funktion verlassen wird, erhalte ich beim Verlassen entweder eine Zugriffsverletzung oder eine ungültige Zeigeroperation.
Das passiert nicht, wenn ich die Komponente zwar erzeuge und freigebe, aber den Web Service nicht aufrufe, und es passiert auch nicht, wenn ich die Komponente am Ende nicht freigebe.
Was ist zu tun? Natürlich könnte ich das doch irgendwie aufs Hauptform legen, aber gefallen will mir das nicht.
So ähnlich sieht der Code aus:
Delphi-Quellcode:
procedure CallWS (aTableID: integer; aKeyString:
string);
var HTTPrio: THTTPRIO;
callURL:
string;
begin
callURL:='
';
try
try
HTTPrio:=THTTPRIO.Create(
nil);
HTTPrio.WSDLLocation:=currConfig.WSDLlocation;
HTTPrio.Service:='
myWS';
HTTPrio.Port:='
myWS_Port';
HTTPrio.HTTPWebNode.UserName:=currConfig.HTTPuser;
HTTPrio.HTTPWebNode.Password:=currConfig.HTTPpassword;
callURL:=(HTTPrio
as myWS_Port).GetPageURL(aTableID,aKeyString);
except
on e:
exception do begin
// Fehler in Log-Datei...
end;
end;
finally
HTTPrio.Free;
end;
// jetzt die URL, die wir bekommen haben, aufrufen
// [...]
end;
Eine Änderung zu
HTTPrio:=THTTPRIO.Create(Application)
hat auch nicht geholfen.
Ideen, anyone?
Bis denn
Bommel