私は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
パラメータをゼロに設定することによって処理されます。