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

最佳答案

可能的增强...我发现,就我的情况而定(如果有问题,这是在肥皂响应中,顺便说一句),如果结果请求短于原始请求(就您的情况而言),那就很麻烦新字符串写回到流中时剩下的。
例如:

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


固定:

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

09-15 14:03