读取从WSDL接口文件生成的soap xml

读取从WSDL接口文件生成的soap xml,xml,delphi,soap,delphi-xe,Xml,Delphi,Soap,Delphi Xe,我在Delphi中创建了半个SOAP接口,试图了解它是如何工作的。我希望看到由文件生成的XML被写出,但作为XML中的新手,我不确定如何获得它。我已经在服务器端得到了帮助,但是我希望能够检查它,而不必在服务器中为每个接口设置代码 代码如下: interface uses Soap.InvokeRegistry, Soap.SOAPHTTPClient, System.Types, Soap.XSBuiltIns; type IHello = interface(IInvokable)

我在Delphi中创建了半个SOAP接口,试图了解它是如何工作的。我希望看到由文件生成的XML被写出,但作为XML中的新手,我不确定如何获得它。我已经在服务器端得到了帮助,但是我希望能够检查它,而不必在服务器中为每个接口设置代码

代码如下:

interface

uses Soap.InvokeRegistry, Soap.SOAPHTTPClient, System.Types, Soap.XSBuiltIns;

type

  IHello = interface(IInvokable)
  ['{243CBD89-8766-F19D-38DF-427D7A02EAEE}']
    function  sayHello(const firstName: string): string; stdcall;
  end;

function GetIHello(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): IHello;


implementation
  uses System.SysUtils;

function GetIHello(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): IHello;
const
  defWSDL = 'http://localhost:8080/wsdl/IHello';
  defURL  = 'http://localhost:8080/soap/IHello';
  defSvc  = 'IHelloservice';
  defPrt  = 'IHelloPort';
var
  RIO: THTTPRIO;
begin
  Result := nil;
  if (Addr = '') then
  begin
    if UseWSDL then
      Addr := defWSDL
    else
      Addr := defURL;
  end;
  if HTTPRIO = nil then
    RIO := THTTPRIO.Create(nil)
  else
    RIO := HTTPRIO;
  try
    Result := (RIO as IHello);
    if UseWSDL then
    begin
      RIO.WSDLLocation := Addr;
      RIO.Service := defSvc;
      RIO.Port := defPrt;
    end else
      RIO.URL := Addr;
  finally
    if (Result = nil) and (HTTPRIO = nil) then
      RIO.Free;
  end;
end;

initialization
  { Hello_PortType }
  InvRegistry.RegisterInterface(TypeInfo(IHello), 'Ihelloservice', '');
  InvRegistry.RegisterDefaultSOAPAction(TypeInfo(IHello), 'sayHello');

end.

Delphi不能从WSDL URL自动生成客户端类吗?是。这就是你在上面看到的。我只想在调用函数GetIHello后询问结果。我可以这样做,它不会崩溃,但这就是我所知道的。我应该能够查询该函数的字符串输出,但无法解决如何执行该操作。我相信这很容易(如果你知道怎么做的话)。函数只返回一个指向接口的指针。如何获取查询字符串?还是我应该找别的地方?我是不是走错了路。我应该先创建服务器并从服务器创建WSDL文件吗?这是更常见的方法吗?