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....