9

我正在 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 解释,但在服务器代码中通过将参数设置为零来处理此错误。

4

2 回答 2

12

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

于 2012-09-26T16:15:13.777 回答
3

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

于 2013-06-05T21:07:47.630 回答