我正在 Symfony 中编写一个 SOAP 应用程序,对于我的所有请求,我都收到了一个错误Procedure 'getClusterName' not present
。
奇怪的是,当我在纯 PHP 中创建一个测试 SOAP 应用程序时,它工作正常,但 Symfony 中的相同代码返回错误。
另一个奇怪的事情是,当我在 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 文件似乎是正确的,因为它将调用与控制器绑定在一起,并且可以与 vanilla PHP 服务一起正常工作。
soap.wsdl_cache_enabled
在 Internet 上,此错误通常由缓存的 wsdl 解释,但在服务器代码中通过将参数设置为零来处理此错误。