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