Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何导入此WSDL?_Delphi_Wsdl_Delphi 2010_Soap Client - Fatal编程技术网

Delphi 如何导入此WSDL?

Delphi 如何导入此WSDL?,delphi,wsdl,delphi-2010,soap-client,Delphi,Wsdl,Delphi 2010,Soap Client,我从客户机收到了一个WSDL,作为导入web服务以与他们的系统互操作的一部分。他们发送了两个文件:WSDL和模式。当我运行WSDL导入器时,我得到如下输出: type // ************************************************************************ // // The following types, referred to in the WSDL document are not being represented

我从客户机收到了一个WSDL,作为导入web服务以与他们的系统互操作的一部分。他们发送了两个文件:WSDL和模式。当我运行WSDL导入器时,我得到如下输出:

type

  // ************************************************************************ //
  // The following types, referred to in the WSDL document are not being represented
  // in this file. They are either aliases[@] of other types represented or were referred
  // to but never[!] declared in the document. The types from the latter category
  // typically map to predefined/known XML or Embarcadero types; however, they could also
  // indicate incorrect WSDL documents that failed to declare or import a schema type.
  // ************************************************************************ //
  // !:LoadData     - "http://client.com/"[Lit][]
  // !:LoadDataResponse - "http://client.com/"[Lit][]


  // ************************************************************************ //
  // Namespace : http://client.com/
  // transport : http://schemas.xmlsoap.org/soap/http
  // style     : document
  // binding   : ClientPortBinding
  // service   : ClientService
  // port      : ClientPort
  // URL       : http://localhost:8080/ClientService
  // ************************************************************************ //
  IClientLoad = interface(IInvokable)
  ['{8DC02C6F-78D3-E09A-FE43-EE5211DB188D}']

    // Cannot unwrap:
    //     - Input part does not refer to an element
    //     - Output part does not refer to an element
    function  LoadDataBatch(const parameters: LoadData): LoadDataResponse; stdcall;
  end;
缺少的类型在它们发送的架构文件中定义。我尝试将WSDL的导入行更改为如下所示,但没有改变任何内容:


我如何正确设置它,以便Delphi的WSDL导入向导检查本地系统上的架构文件并从中读取类型定义?

问题可能不在导入端,而是在导出端。我们的情况是:

一个Delphi编码的服务器应用程序,也响应SOAP Web请求。 使用SOAP与Delphi服务器应用程序通信的.Net编码的客户端应用程序。 如果导出的SOAP接口中没有使用特定的基类型,则Delphi服务器应用程序不会也不会在其WSDL响应中导出该基类型

例如:

TBaseReponseClass = class(TRemotable)
end;

TLoginResponseClass = class(TBaseReponseClass)
end;

ISOAPResponse = interface(IInvokable)
['{SomeGUID}']
  function Ping: TBaseReponseClass ; stdcall
  function Login: TLoginResponseClass ; stdcall;
end;
通过ISOAPResponse中的Ping功能,所有功能都正常运行

如果ISOAPResponse中没有Ping函数,TBaseResponseClass将不会在WSDL中导出,并且在.Net端导入WSDL将引发有关未定义元素的错误


我想您可以检查从客户机获得的WSDL,以查看它是否使用了任何类,这些类的祖先层次结构中的一个或多个类没有包含在WSDL/模式中。如果是这种情况,那么您可能必须回到您的客户机,让他们修改接口。或者,如果幸运的话,也许可以找到一些选项,让WSDL/模式中包含不直接引用的祖先类。我们没有调查后者,因为这两个应用程序都在我们自己的控制之下,简单地添加Ping功能更容易。

问题可能不在导入端,而是在导出端。我们的情况是:

一个Delphi编码的服务器应用程序,也响应SOAP Web请求。 使用SOAP与Delphi服务器应用程序通信的.Net编码的客户端应用程序。 如果导出的SOAP接口中没有使用特定的基类型,则Delphi服务器应用程序不会也不会在其WSDL响应中导出该基类型

例如:

TBaseReponseClass = class(TRemotable)
end;

TLoginResponseClass = class(TBaseReponseClass)
end;

ISOAPResponse = interface(IInvokable)
['{SomeGUID}']
  function Ping: TBaseReponseClass ; stdcall
  function Login: TLoginResponseClass ; stdcall;
end;
通过ISOAPResponse中的Ping功能,所有功能都正常运行

如果ISOAPResponse中没有Ping函数,TBaseResponseClass将不会在WSDL中导出,并且在.Net端导入WSDL将引发有关未定义元素的错误


我想您可以检查从客户机获得的WSDL,以查看它是否使用了任何类,这些类的祖先层次结构中的一个或多个类没有包含在WSDL/模式中。如果是这种情况,那么您可能必须回到您的客户机,让他们修改接口。或者,如果幸运的话,也许可以找到一些选项,让WSDL/模式中包含不直接引用的祖先类。我们没有对后者进行研究,因为这两个应用程序都在我们自己的控制之下,简单地添加Ping功能更容易。

我没有尝试过,但WSDL导入器中有一个选项。处理包含和导入的模式。听起来像是你需要的。默认值是开着的,所以你可能已经有了。我们在使用自己的服务和客户端时遇到了这样的问题。这与D2010导入拒绝非标准类型的元素有关,即使它们是在名称空间中明确定义的。我认为他们只通过在soap接口中使用标准数据类型就解决了这个问题。如果明天早上UTC+1之前你还没有找到答案,我会和我的同事核实。@duffymo:请仔细阅读这个问题。我没有在问题中包括WSDL,只是输出的匿名版本。这是一个具体的delphiwsdl导入器问题;不是WSDL/XML问题。@Mikael:该选项已被选中,但似乎没有帮助。包含和导入的流程不仅默认打开,显然您不能关闭它:我没有尝试过,但WSDL导入器中有一个选项。处理包含和导入的模式。听起来像是你需要的。默认值是开着的,所以你可能已经有了。我们在使用自己的服务和客户端时遇到了这样的问题。这与D2010导入拒绝非标准类型的元素有关,即使它们是在名称空间中明确定义的。我认为他们只通过在soap接口中使用标准数据类型就解决了这个问题。如果明天早上UTC+1之前你还没有找到答案,我会和我的同事核实。@duffymo:请仔细阅读这个问题。我没有在问题中包括WSDL,只是输出的匿名版本。这是一个具体的delphiwsdl导入器问题;这不是一个WSDL/XML问题。@Mikael:该选项已被选中,但似乎没有 帮助。包含和导入的流程不仅默认打开,而且显然您无法关闭它: