0

ZF を使用して Web サービスを実装しました (チュートリアル : http://benjaminprevot.fr/2010/06/16/produire-un-webservice-soap-avec-zend-framework/ [フランス語])

元のチュートリアルは正常に
機能しますが、サーバー側で getDetections() を呼び出すと、フレームワークで例外が発生する理由がわかりません。

コード:

1.1。サーバー側

class WsController extends BaseController 
{
    public function detectionsAction()
    {
        if (is_null($this->getRequest()->getParam('wsdl'))) {
                // Traitement de la requête
                $server = new Zend_Soap_Server('http://localhost/my_app_site/public/ws/detections/?wsdl');
                $server->setClass('Application_Model_WsDetection');
                $server->handle();
        } else {
                // Retour de la WSDL
                $wsdl = new Zend_Soap_AutoDiscover();
                $wsdl->setClass('Application_Model_WsDetection');
                $wsdl->handle();
        }
        exit;
    }
}

1.2. Application_Model_WsDetection

class Application_Model_WsDetection 
{
    /**
    * Retourne la liste des détections enregistrées.
    *
    * @return integer 
    */
    public function getDetections()
    {
        // **the folowing two lines raise an error**
        $detectionsModel = new Application_Model_Detection; //*
        $detectionsModel->fetchAll(); //*
        return 2 ; // just for test
    }
}

2. クライアント側

class WsClientController extends BaseController 
{
    public function detectionsAction()
    {
        $client = new Zend_Soap_Client('http://localhost/my_app_site/public/ws/detections/?wsdl');
        $result = $client->getDetections(); // **This is the line 28**
        Zend_Debug::dump($result);
    }
}

3. Web サービスを呼び出します。

http://localhost/my_app_site/public/wsclient/detections/?wsdl

4. エラー:

Fatal error: 
Uncaught SoapFault exception: [Receiver] Unknown error in C:\xampp\ZendFramework\library\Zend\Soap\Client.php:1121 

Stack trace: 
#0 C:\xampp\ZendFramework\library\Zend\Soap\Client.php(1121): SoapClient->__soapCall('getDetections', Array, NULL, NULL, Array) 
#1 C:\xampp\htdocs\my_app_site\application\controllers\WsClientController.php(28): Zend_Soap_Client->__call('getDetections', Array) 
#2 C:\xampp\htdocs\my_app_site\application\controllers\WsClientController.php(28): Zend_Soap_Client->getDetections() 
#3 C:\xampp\ZendFramework\library\Zend\Controller\Action.php(513): WsClientController->detectionsAction() 
#4 C:\xampp\ZendFramework\library\Zend\Controller\Dispatcher\Standard.php(295): Zend_Controller_Action->dispatch('detectionsActio...') 
#5 C:\xampp\ZendFramework\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) 
#6 C:\xampp\ZendFramework\library\Zend\Appl in C:\xampp\ZendFramework\library\Zend\Soap\Client.php on line 1121

私の問題を十分に説明できたことを願っています

(下手な英語ですみません)

4

1 に答える 1

0

Application_Model_Detection以外の場所でオブジェクトをインスタンス化できますgetDetections()か? はいの場合、おそらく問題は Zend のオートローダーがコアメソッド
内で適切に動作していないことです。SoapClient::__soapCall()(またはその中call_user_func()で発生する内。)追加することで修正できる場合があります

require_once("{full path to Application_Model_Detection file}");

いずれにせよ、オートローダーの名前空間の問題だと思います。「Application_」プレフィックスは Zend にとって特別な意味を持つため、クラスがインスタンス化できることを確認してください。

于 2012-07-06T21:06:26.257 に答える