Thema: Delphi SoapRequest manipulieren

Einzelnen Beitrag anzeigen

Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: SoapRequest manipulieren

  Alt 26. Apr 2017, 11:26
Jup,

schau dir mal die implementierung von TRio.DoBeforeExecute an - da wird aus dem Request ein Stringstream erzeugt, dann in einen String umkopiert und an FOnBeforeExecute übergeben und anschließend wird das Ergebnis verworfen!

Das ist ein heftiger Bug, der leider auch nicht mit den Backports der Änderungen von Delphi 2007 korrigiert wurde.

Hier hilft nur, eine eigenen THttpRio Ableitung, in der habe ich dann zudem anstelle der alten Signatur gleich die Signatur von aktuellen Delphiversionen übernommen (sprich arbeite gleich mit dem Stream weiter und kopiere das Zeugs nicht erst noch in einen String um):

Delphi-Quellcode:
  TBeforeExecuteStreamEvent = procedure(const MethodName: string; SOAPRequest: TStream) of object;

  THTTPRIO_Stream=class(THTTPRIO)
  private
    FOnBeforeExecuteStream: TBeforeExecuteStreamEvent;
    procedure SetOnBeforeExecuteStream(const Value: TBeforeExecuteStreamEvent);
  protected
    procedure DoBeforeExecute(const MethodName: string; Request: TStream); override;
    procedure DoAfterExecute(const MethodName: string; Response: TStream); override;
  public
    property OnBeforeExecuteStream: TBeforeExecuteStreamEvent read FOnBeforeExecuteStream write SetOnBeforeExecuteStream;
    procedure AfterConstruction; override;

  end;
Du musst dann halt beim Aufruf deines Service eine eigene Instanz der Rio-Klasse übergeben....
  Mit Zitat antworten Zitat