Einzelnen Beitrag anzeigen

Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
652 Beiträge
 
Delphi 12 Athens
 
#1

HTTPRIO lokal erzeugt führt zu Zugriffsverletzung

  Alt 12. Jan 2011, 14:47
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
  Mit Zitat antworten Zitat