THETPrio onBeforeExecute更改soapRequest

时间:2010-05-11 22:21:37

标签: delphi wsdl delphi-2009

我为项目导入了一些wsdl。 我想在HttpRio onBeforeExecute事件上更改SoapRequest,但是 因为我更改了请求,我得到一些错误如何更改请求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 个答案:

答案 0 :(得分:5)

可能的增强......我发现,根据我的情况(这是在肥皂响应中,顺便说一下,如果重要的话),如果结果请求比原始请求短(并且在你的情况下是),当新字符串被写回到流中时,剩下的是crud 例如:

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

修正:

SOAPRequest.Postion:= 0; //我在这里忘记了这一点,因为我编写了有效的代码 SOAPRequest.size:= length(sTmp.Text); //重要 - 在保存前设置新长度。
sTmp.SaveToStream(SOAPRequest);

答案 1 :(得分:3)

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;