我为项目导入了一些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;
答案 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;