2012-07-26 12 views
7

私はsymfonyにSOAPアプリケーションを作成していますが、私の要求に応じて私はエラーProcedure 'getClusterName' not presentを受け取ります。PHP SOAPプロシージャ 'functionName'が存在しません

奇妙なことに、純粋なPHPでテスト用のSOAPアプリケーションを作成すると問題なく動作しますが、symfonyの同じコードがエラーを返します。

もう1つの奇妙なことは、SOAPサーバーコードIに利用可能なサービス関数のリストを$server->getFunctions()で指定すると、サービス関数の配列が返され、getClusterNameがその配列に含まれていることです。したがって、関数はサーバーに知られていますが、呼び出すことはできません。

symfonyにおいてサービスを書くとき、私はthis articleに続き、ここに私のコードです:

クライアント

namespace Prj\SoapBundle\Controller; 

class SoapController extends Controller 
{ 
    public function indexAction() 
    { 
     $client = new \SoapClient('http://localhost/test.wsdl'); 
     $client->getClusterName(); 

サーバー

namespace Prj\SoapBundle\Controller; 

class SoapController extends Controller 
{ 
    public function indexAction() 
    { 
    ini_set("soap.wsdl_cache_enabled", "0"); 
    $server = new \SoapServer($this->container->getParameter('wsdl')); 
    $server->setClass('SoapBundle\HelloService'); 
    $server->handle(); 

サービス

namespace Prj\SoapBundle; 

class HelloService 
{ 
    public function getClusterName() 
    { 
     return '<?xml version="1.0" encoding="utf-8"?><root>Hello!</root>'; 
    } 
} 

* .wsdlファイルは、コントローラとの呼び出しをバインドし、バニラPHPサービスで正常に動作するため正しいと思われます。

このエラーは通常、キャッシュされたwsdlによって説明されますが、ここではサーバーコードでsoap.wsdl_cache_enabledパラメータをゼロに設定することによって処理されます。

答えて

11

soap.wsdl_cache_enabled = 0に設定しても、/tmpフォルダを空にしてみてください。

3

接頭辞付きのwsdlファイルのtmpフォルダをクリアしてくれました。私はまた、PHPのwsdl_cache_enabledオプションを0に変更しました。

関連する問題