在类定义中定义NuSOAP服务器

时间:2013-09-06 19:51:15

标签: php nusoap

非常简单。由于我的项目的要求,我必须在类定义中创建一个NuSOAP服务器。我无法让它发挥作用。我收到此错误消息的错误:“msg解析错误:xml为空,没有解析!”我需要做些什么工作?

这是两种方法共同的代码:

require_once('/xxx/nusoap/nusoap.php');

function SomeMethod(
    $someParameter
) {
    return "Success: $someParameter!";
}

function registerSomeMethod() {
    $in = array();
    $in['someParameter'] = 'xsd:string';

    $out = array();
    $out['return'] = 'xsd:string';

    $this->_server->register("SomeMethod",$in,$out,$this->_namespace,"SomeMethod","rpc","encoded");
}

在全局级别添加此代码可生成功能正常的Web服务:

$namespace = 'uri:mycompany'; 

$server = new soap_server;
$server->configureWSDL('mycompany',$namespace);

registerSomeMethod(); 

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);

将该代码包装在类定义中,如下所示产生一个Web服务,该服务将WSDL直接返回给浏览器,但响应带有SoapFault的客户端调用“msg解析错误:xml为空,没有解析!”

class MyService {

    public function __construct() {

        $namespace = 'uri:mycompany'; 

        $server = new soap_server;
        $server->configureWSDL('mycompany',$namespace);

        registerSomeMethod(); 

        $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
        $server->service($HTTP_RAW_POST_DATA);

    }

} // class

$o = new MyService;

2 个答案:

答案 0 :(得分:2)

我修正了这个改变:

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);

为此:

$this->nusoap_server->service(file_get_contents("php://input"));

答案 1 :(得分:0)

解决方案:输入“global $ HTTP_RAW_POST_DATA;”在__construct()中。我是PHP的新手,完全忽略了这个细节。