用PHP调用.net写的WebService服务端

从合作方获取数据,往往都是合作方提供xml格式的数据,或者rsync,甚至直接SQLServer 数据库,对应地,我写php解析xml,直接读取rsync推送过来的文件,用freetds连接SQLServer像读mysql一样去读取数据。周五编辑把合作方的接口文档发信给我,我一看,地址形如http://server:7000/Feature.asmx?wsdl,给了个方法,我立刻一头雾水,这是一个对我来说是完全陌生的领域,马上google,得知原来是著名的WebService (wsdl),随后又google一下PHP如何调用,得知应使用Soap,new一个SoapClient就可以使用了。
<? //初始化SoapClient客户端 $client = new SoapClient ( " http://server:7000/Feature.asmx?wsdl " ) ; $param1 = " aaa " ; $param2 = " bbb " ; $param3 = " cccc " ; //这个WebService提供了一个方法,名为GetFeature其参数调用为三个字符串,所以这样写: $res = $client -> GetFeature ( $param1 , $param2 , $param3 ) ; print_r ( $res ) ; ?>

返回的是一个对象,stdClass,我又蒙了,这玩意怎么解析呢?
没办法,再google。遂明白,这是一个奇异的对象。。具体为什么奇异请自行搜索吧。我继续说我的流程。
PHP有个强大的serialize,无论什么都可以序列化成字符串。好,就用它来格式化一下这个对象。返回:
O:8:”stdClass”:1:{s:16:”GetFeatureResult”;O:8:”stdClass”:1:{s:7:”anyType”;s:6:”100001″;}}
嗯,这下有办法了,把$res->GetFeatureResult->anyType输出看看,果然是100001。
好了,俺这下会解析了返回结果了。剩下的工作是向合作方询问调用密码以生成校验码作为参数传过去,这个事儿就等周一上班再说吧。

周一上班了,打电话和合作方联系,费了一点力气,对应上了对方的校验规则。
好,开始调用看看。但是很快对方在MSN上发来反馈:
Event[10:51:17] 方法GetFeature:param1=param2=param3=[end]
呀,我的参数没有传过去。
再google,发现调用.net的服务器端时,客户端的SoapClient这样是传不过去参数的。
需要改成如下,使用__call(方法名,array(’paramters’->参数数组))
直接调用->方法名(参数)的时候,__call会使用参数数组作为第二个参数,而.net需要把它再套一层数组,并使用‘paramters’作为键值

<? //初始化SoapClient客户端 $client = new SoapClient ( " http://server:7000/Feature.asmx?wsdl " ) ; $param [ " param1 " ] = " aaa " ; $param [ " param2 " ] = " bbb " ; $param [ " param3 " ] = " cccc " ; //必须这样调用才能获得结果,至于为什么必须这么调用,我也不知道…… $res = $client -> __Call ( ' GetFeature ' , array ( ' paramters ' => $param )) ; print_r ( $res -> GetFeatureResult -> anyType ) ; ?>

终于获得了我需要的数据!java写的服务器端用第一种方法调用即可,而.net写的服务器端必须用第二种方法才能把参数正确地传过去。
注:linux下需要编译PHP的时候加上编译参数: –enable-soap。我的PHP版本是5.2.5
windows下只需要去掉extension=php_soap.dll这行前面的分号即可

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值