9

Symfony で SOAP アプリケーションを作成していますが、すべてのリクエストでエラーが発生しますProcedure 'getClusterName' not present

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

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

Symfony でサービスを作成するときは、この記事に従いました。コードは次のとおりです。

クライアント:

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パラメーターをゼロに設定することでサーバー コードで処理されます。

4

2 に答える 2

12

Even if setting soap.wsdl_cache_enabled = 0, try also emptying the /tmp folder.

于 2012-09-26T16:15:13.777 に答える
3

wsdl- プレフィックス付きファイルの tmp フォルダーをクリアすると、うまくいきました。また、開発環境で提案されているように、PHP の wsdl_cache_enabled オプションを 0 に変更しました。

于 2013-06-05T21:07:47.630 に答える