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