Delphi - HTTPRIO组件的SOAP请求问题

时间:2014-02-04 06:20:32

标签: web-services delphi soap delphi-2010

所有

我面临着来自delphi的SOAP请求的奇怪问题,它正在运行,但它没有给出预期的结果。所以我已经开始使用SOAP UI进行调试,我发现了下面的观察结果。

当我使用SOAP UI工具时,我尝试创建新请求并使用下面的标题创建它但是它没有按预期工作(当我从delphi发送请求时遇到同样的问题)。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">

但是如果我在SOAP UI请求中将标题更改为下面,则会给出预期结果。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:acc="http://schemas.datacontract.org/2004/07/AccountService.DataContracts" xmlns:acc1="http://schemas.datacontract.org/2004/07/AccountService.FaultContracts">

如何在delphi 2010中将标题更改为HTTPRIO对象?

1 个答案:

答案 0 :(得分:2)

一种可能性是修改青少年request对象的OnBeforeExecute事件处理程序中的THTTPRIO

如下所示:

procedure TForm1.RIOBeforeExecute(const MethodName: string; SOAPRequest: TStream);
var
  sl : TStringList;
begin
  SOAPRequest.Position := 0;

  sl := TStringList.Create;
  try
    sl.LoadFromStream(SOAPRequest);
    sl.Text := StringReplace(sl.Text, 'old header text', 'new header text', [rfReplaceAll]);
    SOAPRequest.Size := 0;
    SOAPRequest.Position := 0;
    sl.SaveToStream(SOAPRequest);
  finally
    sl.Free;
  end;
end;