THttprio onBeforeExecute меняющий запрос мыла - PullRequest
4 голосов
/ 12 мая 2010

Я импортировал некоторые wsdl для проекта. я хочу изменить SoapRequest для события HttpRio onBeforeExecute, но как я изменил запрос, я получаю некоторые ошибки, как я могу изменить файл запроса XML с функцией stringReplace для этого события.

Я пытался изменить размер потока, я изменил кодировку и т. Д., Но все равно это не сработало.

пример

procedure TForm1.RiomBeforeExecute(const MethodName: string; SOAPRequest: TStream);
var
  sTmp                                  : TStringList;

begin

  sTmp:=TStringList.Create;
  SOAPRequest.Position := 0;
  sTmp.LoadFromStream(SOAPRequest);
  sTmp.Text := StringReplace(sTmp.Text,'blablaa','bla',[RfReplaceAll]);
  sTmp.SaveToStream(SOAPRequest);
  // blaa blaa...
end;

Ответы [ 2 ]

5 голосов
/ 12 мая 2010

Возможное улучшение ... Я обнаружил, с моей ситуацией (и это было в ответе мыла, между прочим, в случае, если это имеет значение), что если результирующий запрос короче оригинала (и в вашем случае это так) когда новая строка записана обратно в поток, был оставлен грубый ответ.
пример:

original: <blablaa some stuff>
intended: <bla some stuff>
actual:   <bla some stuff>uff>

Fix:

SOAPRequest.Postion: = 0; // я забыл это здесь, так как я пишу код, который работал
SOAPRequest.size: = длина (sTmp.Text); // Важно - установить новую длину перед сохранением.
sTmp.SaveToStream (SOAPRequest);

3 голосов
/ 12 мая 2010
procedure TForm1.RiomBeforeExecute(const MethodName: string; SOAPRequest: TStream);
var
  sTmp                                  : TStringList;

begin

  sTmp:=TStringList.Create;
  SOAPRequest.Position := 0;
  sTmp.LoadFromStream(SOAPRequest);
  sTmp.Text := StringReplace(sTmp.Text,'blablaa','bla',[RfReplaceAll]);
   **SOAPRequest.Postion:=0**;// i forget this here, as i write the code that worked
  sTmp.SaveToStream(SOAPRequest);
  // blaa blaa...
end;
...