且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

常用的调用webservice的方法有哪些?

更新时间:2022-08-15 20:00:23

可以根据wsdl文件生成客户端,或者直接根据地址调用。直接调用的话,主要有AXIS和SOAP两种方法
 

  • 我们可以调用哪些操作,这些操作需要的参数是什么?
  • 参数的数据类型定义是什么?

            要搞清楚这两点,我们当然可以去直接阅读 WSDL 文件,但由于 WSDL  文件可能会很复杂,所以有的时候要弄清楚这些问题可能会花费不少的时间;另外,有些时候我们还没有办法得到 WSDL  文件。当然还存在其他方法,SoapClient 类中提供了两个很有用的成员函数可以让我们轻松获得 Web  服务中提供的操作,以及相关的数据结构定义:


            


            

查看 Web 服务开放的方法和数据类型
print_r( $client->__getFunctions() ); 
print_r( $client->__getTypes() );

            通过这两行代码,我们可以看到浏览器显示的结果:


            


            

Web 服务开放的方法和数据类型示例

Array 

  [0] => ProductSpec QuerySpec(ProductQueryCode $QueryCode) 

Array 

  [0] => struct ProductQueryCode { 
    string ProductCode; 
  } 
  [1] => struct ProductSpec { 
    string ProductCode; 
    string CPU; 
    string RAM; 
    string Screen; 
    string HDD; 
  } 
)


            于是我们可以知道,我们可以调用 Web 服务中的 QuerySpec 操作,并且得知了这个操作的输入和输出数据的定义。这个时候我们就可以着手编写调用 QuerySpec 的代码了。下面两个语句都可以完成调用的功能,它们的作用是等效的:


            


            

调用 Web 服务开放的操作
$result = $client->__soapCall('QuerySpec', array( array( "ProductCode" => '1175-PXA') ) ); 
$result = $client->QuerySpec( array( array( "ProductCode" => '1175-PXA') ) );

            可以直接使用 Web 服务中的操作名称作为函数进行调用,就像真的在调用本地定义的函数一样,这种方法比较直观;也可以把操作名称作为参数传给 SoapClient::__soapCall(),效果是一样的。


            需要注意的依然是参数的结构。和服务端一样,输入的参数依然需要组织成数组的形式,但是有一点点不同,已定义好的数组又被放入了最外层的数组中。看起来最外面的一层包装似乎有些多余,但是如果去掉,程序是不会得到正确结果的。


            最后我们需要使用 Web 服务端返回的结果。与前面提到的类似,服务端返回的数据也是以对象嵌套的方式组织的,所以我们只需要用成员引用操作符 (->) 即可获得相应域的值:


            


            

使用 SOAP 应答中的数据
echo "Product Code:" . $client->ProductCode . "<br />"; 
echo "Product Code:" . $client->CPU . "<br />"; 
echo "Product Code:" . $client->RAM . "<br />"; 
echo "Product Code:" . $client->Screen . "<br />"; 
echo "Product Code:" . $client->HDD . "<br />";

            稍加修改,我们就可以得到之前给出的在浏览器中的显示效果了。


            到这里我们的工作似乎已经结束了。但是实际的开发过程是不可能如此顺利的,如果我们的代码没有得到正确的结果怎么办?所以,我们需要了解一些使用 PHP 开发 SOAP 应用程序时的用到的调试知识。



      本文转自许琴 51CTO博客,原文链接:http://blog.51cto.com/xuqin/925192,如需转载请自行联系原作者