Adn*_*KEN 4 delphi wsdl delphi-2009
我为项目导入了一些wsdl.我想在HttpRio onBeforeExecute事件上更改SoapRequest,但是当我更改请求时,我得到一些错误如何在此事件上使用stringReplace函数更改请求xml文件.
我试图改变流的大小,我改变了编码等,但无论如何它没有工作.
例
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;
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
可能的增强......我发现,根据我的情况(这是在肥皂反应中,顺便说一下,如果重要的话),如果结果请求比原始请求短(并且在你的情况下是),那就是将新字符串写回流中时遗留下来.
例如:
original: <blablaa some stuff>
intended: <bla some stuff>
actual: <bla some stuff>uff>
Run Code Online (Sandbox Code Playgroud)
固定:
SOAPRequest.Postion:= 0; //我在这里忘记了这一点,因为我编写了
SOAPRequest.size的代码:= length(sTmp.Text); //重要 - 保存前设置新长度.
sTmp.SaveToStream(SOAPRequest);
| 归档时间: |
|
| 查看次数: |
9931 次 |
| 最近记录: |