PHP SOAP Procedure'functionName'不存在

时间:2012-07-26 23:03:41

标签: php soap symfony

我正在Symfony中编写SOAP应用程序,并且我的所有请求都收到错误Procedure 'getClusterName' not present

奇怪的是,当我在纯PHP中创建测试SOAP应用程序时,它工作正常,但Symfony中的相同代码会返回错误。

另一个奇怪的事情是,在SOAP服务器代码中,我列出了$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文件似乎是正确的,因为它将调用绑定到控制器并且可以与vanilla PHP服务一起使用。

在Internet上,此错误通常由缓存的wsdl解释,但这可以通过将soap.wsdl_cache_enabled参数设置为零来在服务器代码中处理。

2 个答案:

答案 0 :(得分:11)

即使设置soap.wsdl_cache_enabled = 0,也请尝试清空/tmp文件夹。

答案 1 :(得分:3)

清除wsdl-前缀文件的tmp文件夹对我有用。我还根据我的开发环境中的建议将PHP的wsdl_cache_enabled选项更改为0。