1

很简单。由于我的项目的要求,我必须在类定义中创建一个 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;
4

2 回答 2

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"));
于 2016-01-13T21:58:46.473 回答
0

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

于 2013-09-08T20:17:19.380 回答