读取从WSDL接口文件生成的soap xml
我在Delphi中创建了半个SOAP接口,试图了解它是如何工作的。我希望看到由文件生成的XML被写出,但作为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)
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文件吗?这是更常见的方法吗?