1

Zend_Soap_AutoDiscover我在从类中生成 WSDL 文件时遇到问题。
有人可以解释我做错了什么吗?

在 bootstrap.php 我有一个方法:

public function _initWsdl()
{
    require_once("http://localhost:8080/zf_mta/backend.php");
    $autoDiscover = new Zend_Soap_AutoDiscover('Zend_Soap_Wsdl_Strategy_ArrayOfTypeComplex');
    $autoDiscover->setClass('Backend');
    $autoDiscover->setUri('http://localhost:8080/zf_mta/backend.php');
    $autoDiscover->handle();

    return $autoDiscover;
}

这是 backend.php 类

class Order {

    /** @var string */
    public $productid;
    /** @var string */
    public $customerid;
    /** @var int */
    public $productcnt;

    public function __construct($productid,$customerid,$productcnt) {
        $this->productid  = $productid;
        $this->customerid = $customerid;
        $this->productcnt = $productcnt;
    }
}

class Orders {

    /** @var Order[] */
    public $orders;

}

class Backend {

    /**
     * @param Orders $orders
     * @return string
     */
    public function placeOrders($orders) {
        return print_r($orders,1);
    }


}

我收到错误:

内部服务器错误

服务器遇到内部错误或配置错误,无法完成您的请求...

错误日志:

[07-Sep-2012 13:39:48 UTC] PHP Warning:  require_once() [<a href='function.require-once'>function.require-once</a>]: http:// wrapper is disabled in the server configuration by allow_url_include=0 in E:\Zend Server\Apache2\htdocs\zf_mta\application\Bootstrap.php on line 18
[07-Sep-2012 13:39:48 UTC] PHP Warning:  require_once(http://localhost:8080/zf_mta/backend.php) [<a href='function.require-once'>function.require-once</a>]: failed to open stream: no suitable wrapper could be found in E:\Zend Server\Apache2\htdocs\zf_mta\application\Bootstrap.php on line 18
[07-Sep-2012 13:39:48 UTC] PHP Fatal error:  require_once() [<a href='function.require'>function.require</a>]: Failed opening required 'http://localhost:8080/zf_mta/backend.php' (include_path='E:\Zend Server\Apache2\htdocs\zf_mta\application/../library;E:\Zend Server\Apache2\htdocs\zf_mta\library;.;E:\Zend Server\ZendServer\share\ZendFramework\library') in E:\Zend Server\Apache2\htdocs\zf_mta\application\Bootstrap.php on line 18
4

1 回答 1

1

Florent 的评论解决了第一个问题:您的 PHP 配置禁止使用 HTTP 包含文件。因此,您需要更改 require 语句以引用文件系统中的文件名。

但是,我发现您的代码存在其他几个问题:

  • 您将生成的 WSDL 的 URI 设置为 Backend 类的 URI。这是行不通的,因为该文件不包含充当 SOAP 客户端或 SOAP 服务器所需的代码。

  • Zend_Soap_Autodiscover通常在 SOAP 服务器中用于响应客户端对 WSDL 副本的请求。因此,您通常会将该代码包含在专门用于处理该请求的方法中,而不是应用程序引导程序中。

  • 忽略前一点,我还注​​意到您Zend_Soap_Autodiscover在 _initWsdl() 函数的末尾返回了实例。我很确定调用_init...()方法的代码会忽略从这些方法传回的任何值或对象,因此最终该代码将什么也不做。

我认为您需要查看一些示例代码才能真正了解如何使用 Zend Framework 实现 SOAP 服务器。以下片段是关于使用 Zend Framework for SOAP 服务的最简单示例,我可以提出:http ://pastebin.com/9mb64LeG请注意,它不使用 Zend MVC 或路由基础设施,但它可能会对您有所帮助了解Zend_Soap_Serverand的基本用法Zend_Soap_Autodiscover

于 2012-09-10T01:43:40.677 回答