php是弱数据类型语言,而c++对语言又非常注重数据类型,因此,最近在研究php的soap webservice时遇到很大的问题,目前已经解决。
研究的目标是利用php 搭建webservice, 输入和输出参数都是array类型,元素为string类型。client为c++。
问题伊始,查阅了大量资料,这种模式貌似没有人使用。只有自己跟踪摸索,并且还有个php的bug(SOAP server return Procedure ' ' not present),还好,php team 在最新的5.2.5中已经修复了。
环境:winxp Apache/2.2.8 (Win32) PHP/5.2.5
程序如下:
PHP SOAP SERVER
<?
php
class server {
/* *
* run for webservice
*
* @param string[] $inputParam//
* @return string[]
*/
public function run( $inputParam ){
$Param = $inputParam -> param -> string ; // 关键点,获取stdClass对象内容
$obj = new stdClass; // 关键点,设置stdClass对象内容作为返回参数
$obj -> runResult -> string = array ( $Param [ 0 ] , ' b ' , ' c ' , ' d ' , ' e ' );
return $obj ;
}
}
$server = new SoapServer( ' ws.wsdl ' , array ( ' soap_version ' => SOAP_1_2 , ' encoding ' => ' UTF-8 ' ));
$server -> setClass( " server " );
if ( isset ( $HTTP_RAW_POST_DATA )) {
$request =
class server {
/* *
* run for webservice
*
* @param string[] $inputParam//
* @return string[]
*/
public function run( $inputParam ){
$Param = $inputParam -> param -> string ; // 关键点,获取stdClass对象内容
$obj = new stdClass; // 关键点,设置stdClass对象内容作为返回参数
$obj -> runResult -> string = array ( $Param [ 0 ] , ' b ' , ' c ' , ' d ' , ' e ' );
return $obj ;
}
}
$server = new SoapServer( ' ws.wsdl ' , array ( ' soap_version ' => SOAP_1_2 , ' encoding ' => ' UTF-8 ' ));
$server -> setClass( " server " );
if ( isset ( $HTTP_RAW_POST_DATA )) {
$request =