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

简介:

可以根据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,如需转载请自行联系原作者





相关文章
|
7月前
|
Java 应用服务中间件 Spring
WebService - CXF开发Server和Client(main方法测试)
WebService - CXF开发Server和Client(main方法测试)
104 0
|
XML Java 机器人
webservice接口调用OA方法
最近一直在做这样一个需求,在OA中写一个webservice接口,通过调用OA中更新的方法来同步上级主管,我们公司的OA系统是买的产品,一无所知的我就这样开启了无悔的探索寻求之路~
|
XML Java 应用服务中间件
如何做接口测试?postman测试工具的操作使用 及测试webservice接口方法
如何做接口测试?postman测试工具的操作使用 及测试webservice接口方法
|
C# 数据格式 XML
C# 调用WebService的方法
很少用C#动态的去调用Web Service,一般都是通过添加引用的方式,这样的话是自动成了代理,那么动态代理调用就是我们通过代码去调用这个WSDL,然后自己去生成客户端代理。更多的内容可以看下面的两个地址:http://blog.
1092 0
|
XML 前端开发 Java
java调用webservice接口 几种方法
webservice的 发布一般都是使用WSDL(web service descriptive language)文件的样式来发布的,在WSDL文件里面,包含这个webservice暴露在外面可供使用的接口。今天搜索到了非常好的 webservice provider列表
8582 0
|
.NET 网络架构 数据安全/隐私保护