在WSDL导入程序执行后,Delphi XE过程而不是函数

时间:2014-08-22 00:39:23

标签: xml web-services delphi soap wsdl

我正在尝试使用Delphi XE6中的NAV 2009 Web服务(在XE5中是相同的),我使用"导入WSDL"从XE6和创建的单元公开了几个SOAP方法作为过程而不是函数。

以下是生成的代码:

Ficha_Cliente_Port = interface(IInvokable)
  ['{928A4E8E-B9A4-4C91-9666-D4DFE550D3CD}']
    function  Read_(const No: string): Ficha_Cliente; stdcall;
    function  ReadByRecId(const recId: string): Ficha_Cliente; stdcall;
    function  ReadMultiple(const filter: Array_Of_Ficha_Cliente_Filter; const bookmarkKey: string; const setSize: Integer): Ficha_Cliente_List; stdcall;
    function  IsUpdated(const Key: string): Boolean; stdcall;
    function  GetRecIdFromKey(const Key: string): string; stdcall;
    procedure Create(const Ficha_Cliente: Ficha_Cliente); stdcall;
    procedure CreateMultiple(const Ficha_Cliente_List: Ficha_Cliente_List); stdcall;
    procedure Update(const Ficha_Cliente: Ficha_Cliente); stdcall;
    procedure UpdateMultiple(const Ficha_Cliente_List: Ficha_Cliente_List); stdcall;
    function  Delete(const Key: string): Boolean; stdcall;
end;

例如,方法Create必须返回Ficha_Cliente类型的对象,并且在这种情况下没有返回值,因为这种实现是作为过程而不是函数。

我可以使用所有功能,但不能使用任何程序。

我从php和c#中使用这个web服务没有问题,但是我不知道用delphi做这个的方法,我是Delphi的新手。

* ---------------------------------------------- ---- WSDL中的方法定义是:

<operation name="Read"><input name="Read" message="tns:Read"/><output name="Read_Result" message="tns:Read_Result"/>
<operation name="Create"><input name="Create" message="tns:Create"/><output name="Create_Result" message="tns:Create_Result"/></operation>

消息Read,Read_Result,Create和Create_Result都是Ficha_Cliente类型,可以在下面看到

<message name="Create_Result"><part name="parameters" element="tns:Create_Result"/></message>

<xsd:element name="Create_Result">-<xsd:complexType>-<xsd:sequence><xsd:element name="Ficha_Cliente" type="tns:Ficha_Cliente" maxOccurs="1" minOccurs="1"/></xsd:sequence></xsd:complexType></xsd:element>

也就是说,在我看来,Delphi使用WSDL导入器生成的单元必须包含一个名为Create whith的函数,该函数类型为Create_Result(类型为Ficha_Cliente),但缺少。

如果我尝试在Delphi中执行命令(HTTPRIO1 as Ficha_Cliente_Port).Create(Ficha); 其中Ficha是Ficha_Cliente类型,项目已编译但我收到访问冲突错误。

0 个答案:

没有答案