Einzelnen Beitrag anzeigen

Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.764 Beiträge
 
Delphi 11 Alexandria
 
#1

Wrapper für SOAP Aufrufe gesucht

  Alt 27. Jan 2017, 13:47
Delphi-Version: 10 Berlin
Ich habe da ein kleines "Problem" Ich habe zur Kommunikation mit einem SOAP Server ca. 15 Methoden, die die eigentlichen SOAP-Calls die der Delphi-WSDL Assistent erzeugt aufruft. Da das multithreaded und auch plattformübergreifend gehen muss sehen diese Methoden weitgehend gleich aufgeblasen aus:

Delphi-Quellcode:
function TKommunikation.SendShutDown(aShutDownType: Integer): Boolean;
var
  ServerPort: DevicePortType; // aus automatisch erzeugten SOAP.pas
begin
  Result := False;
{$IFDEF MSWINDOWS}
  CoInitialize(nil);
{$ENDIF MSWINDOWS}
  ServerPort := GetDevicePortType(False, fConfig.SoapServerAdress);
  if fConnectionOK then
  begin
  // Individuelles von hier
    Result := ServerPort.Shutdown(aShutDownType) = 'Done';
  // bis hier
  end;
{$IFDEF MSWINDOWS}
  CoUninitialize;
{$ENDIF MSWINDOWS}
end;
Es ergeben sich bei den Methoden nur marginale Unterschiede im als Individuell markierten Bereich. Ich habe nach einer langen Woche nur noch Bretter vor dem Kopf und komme nicht darauf, wie ich das 15 fache
Delphi-Quellcode:
var
  ServerPort: DevicePortType; // aus automatisch erzeugten SOAP.pas
begin
  Result := False;
{$IFDEF MSWINDOWS}
  CoInitialize(nil);
{$ENDIF MSWINDOWS}
  ServerPort := GetDevicePortType(False, fConfig.SoapServerAdress);
nur noch einmal brauche. Ich hatte mich bis eben daran versucht den eigentlichen SOAP-Call als Parameter an eine einzelne Methode zu übergeben, die dann das ganze Brimborium drumherum klatscht. Aber das scheiterte an meinen Gehirnwindungen...bin ich auf dem Holzweg?
Delphi-Quellcode:
function TKommunikation.SOAPComWrapper(aFunc: TFunc<Integer, Boolean>): Boolean;
var
  ServerPort: DevicePortType; // aus automatisch erzeugten SOAP.pas
begin
  Result := False;
{$IFDEF MSWINDOWS}
  CoInitialize(nil);
{$ENDIF MSWINDOWS}
  ServerPort := GetDevicePortType(False, fConfig.SoapServerAdress);
  if fConnectionOK then
  begin
    Result := aFunc; // Das mag der Compiler nicht, es fehlen ja Parameter, aber die sollen
                      // ja mit übergeben werden dachte ich...
  end;
{$IFDEF MSWINDOWS}
  CoUninitialize;
{$ENDIF MSWINDOWS}
end;
Ist das ein falscher Ansatz? Geht es anders leichter oder besser?

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat