php webservice创建,php wsdl SOAP创建WebService

这几天,为了php创建一个“可以轻松理解”的WSDL文件而折腾了一会,实话说,php在这方面还是一个SB,即使最新的版本,还是令我比较失望的。但,我还是有解决方案的。

Tags:phpwsdlSOAPWebService

来,先搞个demo上来瞧瞧。创建一个WebService层比较简单:

class TestWebServices2 {

function GetGUIDNode($GUID1,$GUID2){

Return '$GUID1='.$GUID1.',and $GUID2='.$GUID2;

}

}

ini_set("soap.wsdl_cache_enabled", "0"); //禁止wsdl缓存

$server =  new SoapServer('server3.wsdl',array('uri'=>'urn:TestWebServices2'));

$server->setClass("TestWebServices2");

$server->handle();

?>

这个服务层的wsdl文件我们暂时不说,当作已经存在了,再看客户端代码:

header("Content-Type: text/html; charset=utf-8");

$ws     = "http://s/test/oksoap/server3.php?wsdl";

$client = new SoapClient($ws,array('trace' => 1,'uri'=>'urn:TestWebServices2'));

echo("SOAP服务器提供的开放函数:");

echo('

');

var_dump($client->__getFunctions());

echo('

');

echo("SOAP服务器提供的Type:");

echo('

');

var_dump($client->__getTypes());

echo('

');

echo("执行GetGUIDNode的结果:");

try {

$username = $client->GetGUIDNode('5do8','para 2');

} catch (SoapFault $fault){

echo "Fault! code:",$fault->faultcode,", string: ",$fault->faultstring;

}

echo(htmlspecialchars($client->__getLastRequest()));

echo('


');

echo(htmlspecialchars($client->__getLastResponse()));

echo('


');

echo('


');

var_dump($username);

?>

OK,然后着手WSDL部分的说明,首先,我这里说的是WSDL1.1,烂!不很严格主要是。

很多网上的SB说可以用ZEND创建一个wsdl就完事了,这种同学可能在php5.2.x这种最强版本(^-^)下还没测试过或者没有仔细的看php服务端的返回值,很负责任的说,empty,对了,生成的WDSL最好若经过M$的WSDL根据的验证。。。就OK了。

ZEND创建的WSDL没错,错在php的SoapServer无法识别一个最正常的WSDL文件,shit!问题就在namespace下面。

我先说说一个正常的WSDL的几个部分:

1: wsdl:types 类型,指明W3C的XMLSchema下面不识别的。

2:wsdl:message 消息,传递的信号。

3:wsdl:portType 指明匹配消息与执行的方法

4:wsdl:binding 真正绑定执行服务器方法与客户端方法

5:wsdl:service 公开的WebService名称

这五大部分的关系就是逐步加深,一个迂回。

我这里只说wsdl:types和wsdl:message在php解析中的问题,首先看:

这是一个请求的消息,一个message封装了part部分的参数,其中part有三个重要属性,name就是名称,type就是类型,还有个element,就是wsdl:types所定义的TYPE!问题就在这里,PHP目前还无法正确识别element所定义的类型。

so...

解决方案:

1:找出WSDL文件,保证

2:找到wsdl:message这个,其中的wsdl:part的element属性全部换成type指明的,type="xsd:string"这种。

然后可以通过微软wsdl的验证。

补充:这样php的__getTypes将是array(0),这个关系不大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值