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 サーバーを実装する方法を本当に理解するには、サンプル コードを確認する必要があると思います。次のスニペットは、私が思いついた SOAP サービスに Zend Framework を使用する最も簡単な例です: http://pastebin.com/9mb64LeG Zend MVC またはルーティング インフラストラクチャを使用していないことに注意してください。と の基本的な使い方を理解してZend_Soap_ServerくださいZend_Soap_Autodiscover

于 2012-09-10T01:43:40.677 に答える