【问题标题】:Delphi - SOAP Request issue with HTTPRIO componentDelphi - HTTPRIO 组件的 SOAP 请求问题
【发布时间】:2014-02-04 06:20:32
【问题描述】:

全部

我遇到了来自 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 对象?

【问题讨论】:

    标签: web-services delphi soap delphi-2010


    【解决方案1】:

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

    类似以下内容:

    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;
    

    【讨论】:

    • 嗯,它更改了请求中的文本,但仍然无法正常工作:(
    • 我们在webservice中有很多功能,只有一个功能不工作,其他的都很好。
    • 您能具体说明您遇到了什么错误吗?是一样的吗?我已经在 XE5 上对此进行了测试,并且可以正常工作。不幸的是,我没有任何 Delphi 2010 副本可供测试...
    • 与标题一起,您可能需要对正文中的命名空间进行替换,以匹配您在标题中所做的事情。使用相同的 RIOBeforeExecute 处理程序(上图)将请求转储到文件中,这样您就可以看到您正在发送的内容,然后与“SoapUI 中的内容”进行比较。如有必要,使用进一步的 StringReplace 进行破解。最终,您可以使 Delphi 输出看起来像您的 SoapUI 示例。这应该不是必需的,但通常是使 Delphi SOAP 工作所必需的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    相关资源
    最近更新 更多