【问题标题】:PHP SoapClient: Problems with Distributed WSDL FilePHP SoapClient:分布式 WSDL 文件的问题
【发布时间】:2010-02-26 14:53:32
【问题描述】:

我在使用 PHP 的 SoapClient 的分布式 WSDL 文件(方案/其他定义在实际 WSDL 之外声明)时遇到问题。

这是我收到的错误消息:

SOAP-ERROR: Parsing WSDL:  'getSomeInfo' already defined.

经过一番谷歌搜索,这似乎是 PHP 内部的一个错误,因为其他人发现了完全相同的问题:http://bugs.php.net/bug.php?id=45282

是否有任何错误修复?有什么解决方案可以解决这个错误?

我认为发布代码 sn-p 是毫无意义的,因为仅使用 WSDL 调用 SoapClient ctor 是唯一失败的。

【问题讨论】:

  • 回复:您的代码示例。发布您正在使用的 WSDL 文件以及您用于调用 Soap 客户端的选项将使 SO 用户解决问题并找到解决方法(或发现您缺少关键名称空间选项或其他东西)

标签: php soap wsdl client distributed


【解决方案1】:

我有同样的问题。问题出在 wsdl 和导入中,我从站点保存了 wsdl 并指出 soapclient 使用本地文件,但所有引用都是原始的。 Soap 客户端每次从远程主机获取文件,转到部件,然后从它们返回到相同的文件,但在远程驱动器上。这导致同一个文件被加载两次。 解决方案是仅使用远程文件或将路径重写到本地(全部)。当您在项目 wsdl 上点击“导出定义”时,SoapUI 会执行此操作。希望这会帮助别人。

【讨论】:

    【解决方案2】:

    处理import 节点的PHP 源代码(svn) 包含注释/* TODO: namespace ??? */。命名空间被忽略,这会导致方法冲突。

    提出了三种解决方案:

    1. 修复源代码以适应命名空间(这将是非常受欢迎的)
    2. 操纵 WSDL 文件以防止此类方法重叠(这可能不是一个选项)
    3. 不使用原始 WSDL 文件,而是使用单独的 SoapClient 实例单独调用导入的文件(或不存在方法名称冲突的组)。

    很抱歉,我无法提供更多帮助。

    【讨论】:

      【解决方案3】:

      下载 WSDL 文件的本地副本。删除重复的方法名称。更新您的soap 客户端以使用本地WSDL 文件。过去这对我来说效果很好。

      【讨论】:

        【解决方案4】:

        我在访问通过 PHP 提供多个端点的 WCF 服务时遇到了同样的问题。在我的例子中,结果证明主 WSDL 为每个端点导入子 WSDL,而子 WSDL 确实依次包含主 WSDL。这显然是 PHP 两次读取 main-WSDL 并出现“已定义”错误的原因。我可以通过使用所需端点的子 WSDL URL 而不是主 WSDL URL 创建客户端来避免这种行为。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-03-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-21
          相关资源
          最近更新 更多