soap方法

一:PHP本身的SOAP
所有的webservice都包括服务端(server)和客户端(client)。
要使用php本身的soap首先要把该拓展安装好并且启用。下面看具体的code
首先这是服务端实现:

<?php   

class test   

{   

    function show()   

    {   

        return 'the data you request!';   

    }   

}   

function getUserInfo($name)   

{   

    return 'fbbin';   

}   

//实例化的参数手册上面有,这个是没有使用wsdl的,所以第一个参数为null,如果有使用wsdl,那么第一个参数就是这个wsdl文件的地址。   

$server = new SoapServer(null, array('uri' ='http://soap/','location'='http://localhost/test/server.php'));   

$server->setClass('test');   

//$server->addFunction('getUserInfo');   

$server->handle();   

?>

然后是客户端

复制代码 代码如下:

$soap = new SoapClient(null, array('location'='http://localhost/test/server.php','uri' ='http://soap/'));     

echo $soap->show();   

//得到:'the data you request!'   

//echo $soap->getUserInfo('sss');

就这么简单,当时这只是一个很简单的例子,其实很多的通信机制都是这么去实现的!

PHP webService 技术一(使用XML-RPC)

[  Web Service介绍 ]
Web
Service就是为了异构系统的通信而产生的,它基本的思想就是使用基于XML的HTTP的远程调用提供一种标准的机制,而省去建立一种新协议的需求。目前进行Web

Service通信有两种协议标准,一种是XML-RPC,另外一种是SOAP。XML-RPC比较简单,出现时间比较早,SOAP比较复杂,主要是一些需要稳定、健壮、安全并且复杂交互的时候使用。
PHP中集成了XML-RPC和SOAP两种协议的访问,都是集中在xmlrpc扩展当中。另外,在PHP的PEAR中,不管是PHP
4还是PHP
5,都已经默认集成了XML-RPC扩展,而且该扩展跟xmlrpc扩展无关,能够独立实现XML-RPC的协议交互,如果没有xmlrpc扩展,建议使用PEAR::XML-RPC扩展。
我们这里主要是以XML-RPC来简单描述Web Service的交互过程,部分内容来自PHP手册,更详细内容,建议参考手册。

[  安装xmlrpc扩展 ]
如果你的系统中没有安装xmlrpc的php扩展,那么请正确安装。在Windows平台下,首先把PHP安装目录下的扩展php_xmlrpc.dll放到C:Windows或者C:Winnt目录下,
(PHP4的扩展在C:phpextensions目录中,PHP5的扩展在C:phpext目录中),同时在
在apache 的安装目录下的php.ini中把extension=php_xmlrpc.dll前面的分号";"去掉,然后重
启Web服务器后查看phpinfo()有没有XML-RPC项目就能够确定是否已经正确安装xmlrpc扩展。
rpc_server.php

  1. <?php
  2. /**
  3. * 函数:提供给RPC客户端调用的函数
  4. * 参数:
  5. * $method 客户端需要调用的函数
  6. * $params 客户端需要调用的函数的参数数组
  7. * 返回:返回指定调用结果
  8. */
  9. function rpc_server_func($method, $params) {
  10. $parameter = $params[0];
  11. if ($parameter == "get")
  12. {
  13. $return = "dikers".$params[0];
  14. }
  15. else
  16. {
  17. $return = "Not specify method or params";
  18. }
  19. return $return;
  20. }
  21. //产生一个XML-RPC的服务器端
  22. $xmlrpc_server = XMLrpc_server_create();
  23. //注册一个服务器端调用的方法rpc_server,实际指向的是rpc_server_func函数
  24. xmlrpc_server_register_method($xmlrpc_server, "rpc_server", "rpc_server_func");
  25. //接受客户端POST过来的XML数据
  26. $request = $HTTP_RAW_POST_DATA;
  27. //执行调用客户端的XML请求后获取执行结果
  28. $xmlrpc_response = xmlrpc_server_call_method($xmlrpc_server, $request, null);
  29. //把函数处理后的结果XML进行输出
  30. header("Content-Type: text/xml");
  31. echo $xmlrpc_response;
  32. //销毁XML-RPC服务器端资源
  33. xmlrpc_server_destroy($xmlrpc_server);
  34. ?>
  35. rpc_client.php
  36. <?PHP
  37. /**
  38. * 函数:提供给客户端进行连接XML-RPC服务器端的函数
  39. * 参数:
  40. * $host 需要连接的主机
  41. * $port 连接主机的端口
  42. * $rpc_server XML-RPC服务器端文件
  43. * $request 封装的XML请求信息
  44. * 返回:连接成功成功返回由服务器端返回的XML信息,失败返回false
  45. */
  46. function rpc_client_call($host, $port, $rpc_server, $request) {
  47. //打开指定的服务器端
  48. $fp = fsockopen($host, $port);
  49. //构造需要进行通信的XML-RPC服务器端的查询POST请求信息
  50. $query = "POST $rpc_server HTTP/1.0nUser_Agent: XML-RPC ClientnHost: ".$host."nContent-Type: text/XMLnContent-Length: ".strlen($request)."nn".$request."n";
  51. //把构造好的HTTP协议发送给服务器,失败返回false
  52. if (!fputs($fp, $query, strlen($query)))
  53. {
  54. $errstr = "Write error";
  55. return false;
  56. }
  57. //获取从服务器端返回的所有信息,包括HTTP头和XML信息
  58. $contents ="";
  59. while (!feof($fp))
  60. {
  61. $contents .= fgets($fp);
  62. }
  63. //关闭连接资源后返回获取的内容
  64. fclose($fp);
  65. //print_r($contents);
  66. return $contents;
  67. }
  68. //构造连接RPC服务器端的信息
  69. $host = "127.0.0.1";
  70. $port = 80;
  71. $rpc_server = "/sample/rpc_server.php";
  72. //http://127.0.0.1/sample/rpc_server.php
  73. //把需要发送的XML请求进行编码成XML,需要调用的方法是rpc_server,参数是get
  74. $request = XMLrpc_encode_request("rpc_server", "get");
  75. //调用rpc_client_call函数把所有请求发送给XML-RPC服务器端后获取信息
  76. $response = rpc_client_call($host, $port, $rpc_server, $request);
  77. //分析从服务器端返回的XML,去掉HTTP头信息,并且把XML转为PHP能识别的字符串
  78. $split = '<?XML version="1.0" encoding="iso-8859-1"?>';
  79. $XML = explode($split, $response);
  80. $xml = $split.array_pop($XML);
  81. //print_r($xml);
  82. $response = xmlrpc_encode($xml);
  83. //输出从RPC服务器端获取的信息
  84. print_r($response);
  85. ?>
 
复制内容到剪贴板

代码:

<?xml version="1.0" encoding="iso-8859-1"?>
<methodResponse>
<params>
<param>
  <value>
   <string>This data by get method</string>
  </value>
</param>
</params>
</methodResponse>

那么我们再通过xmlrpc_decode, simplexml_load_string等函数把这个XML编码为PHP的字符串,我们就能够随意处理了,整个Web Service交互完成。

[  结束语 ]
不管是XML-RPC也好,SOAP也罢,只要能够让我们稳定、安全的进行远程过程的调用,完成我们的项目,那么就算整个Web
Service就是成功的。另外,如果可以的话,也可以尝试使用PEAR中的XML-RPC来实现上面类似的操作,说不定会更简单,更适合你使用。
简单的使用XML-RPC进行Web Service交互就完成了,部分代码参考PHP手册,想获取详细信息建议参考手册。

大致我们上面的例子就是提交一个叫做rpc_server的方法过去,参数是get,然后获取服务器端的返回,服务器端返回XML数据

webservice使用的更多相关文章

  1. webService

    什么是webService WebService,顾名思义就是基于Web的服务.它使用Web(HTTP)方式,接收和响应外部系统的某种请求.从而实现远程调用.  1:从WebService的工作模式上 ...

  2. 开始webservice了

    一.WebService到底是什么 一言以蔽之:WebService是一种跨编程语言和跨操作系统平台的远程调用技术. 所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用 ...

  3. Spring WebService入门

    Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述.发布.发现.协调和配置这些应用程序,用于开发分布 ...

  4. 浅谈跨域以及WebService对跨域的支持

    跨域问题来源于JavaScript的同源策略,即只有 协议+主机名+端口号 (如存在)相同,则允许相互访问.也就是说JavaScript只能访问和操作自己域下的资源,不能访问和操作其他域下的资源. 在 ...

  5. 浅谈WebService的版本兼容性设计

    在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...

  6. Atitit webservice发现机制 WS-Discovery标准的规范attilax总结

    Atitit webservice发现机制 WS-Discovery标准的规范attilax总结 1.1. WS-Discovery标准1 1.2. 一.WS-Discovery1 1.2.1.   ...

  7. java调用CXF WebService接口的两种方式

    通过http://localhost:7002/card/services/HelloWorld?wsdl访问到xml如下,说明接口写对了. 2.静态调用 // 创建WebService客户端代理工厂 ...

  8. VS2010编写WebService与在IIS的发布<之简单讲解>

    工具VS2010,window环境win7 一:Webservice的创建与方法查看调用 1.新建空web应用程序项目 2.新建web服务 3.自动生成 4.直接跑起来,可以看到有2个方法 5.点击H ...

  9. webService学习之路(三):springMVC集成CXF后调用已知的wsdl接口

    webService学习之路一:讲解了通过传统方式怎么发布及调用webservice webService学习之路二:讲解了SpringMVC和CXF的集成及快速发布webservice 本篇文章将讲 ...

  10. webService学习之路(二):springMVC集成CXF快速发布webService

    继上一篇webService入门之后,http://www.cnblogs.com/xiaochangwei/p/4969448.html ,现在我将我周六在家研究的结果公布出来 本次集成是基于之前已 ...

随机推荐

  1. 【纪念】NOIP2018后记——也许是一个新的起点

    如果你为了失去太阳而哭泣,那么你也将失去星星和月亮. —— 泰戈尔<飞鸟集> NOIP结束了,我挂了一道题……曾经在心中觉得怎么都不会考到的分数,就这么冷冷的出现在了我的成绩单上.的确是比 ...

  2. [AT2000] [agc002_f] Leftmost Ball

    题目链接 AtCoder:https://agc002.contest.atcoder.jp/tasks/agc002_f 洛谷:https://www.luogu.org/problemnew/sh ...

  3. Hive(六)hive执行过程实例分析与hive优化策略

    一.Hive 执行过程实例分析 1.join 对于 join 操作:SELECT pv.pageid, u.age FROM page_view pv JOIN user u ON (pv.useri ...

  4. python基础----模块、包

    一 模块                                                                                                 ...

  5. 网络编程----socketserver多并发实现、FTP上传多并发、udp协议套接字多并发

    一.socketserver多并发                                                              基于tcp的套接字,关键就是两个循环,一个 ...

  6. 【OpenCV】SIFT原理与源码分析:关键点搜索与定位

    <SIFT原理与源码分析>系列文章索引:http://www.cnblogs.com/tianyalu/p/5467813.html 由前一步<DoG尺度空间构造>,我们得到了 ...

  7. 高并发大容量NoSQL解决方案探索

    大数据时代,企业对于DBA也提出更高的需求.同时,NoSQL作为近几年新崛起的一门技术,也受到越来越多的关注.本文将基于个推SRA孟显耀先生所负责的DBA工作,和大数据运维相关经验,分享两大方向内容: ...

  8. Python基础之面向对象(初级篇)

    概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 面向过程编程最易被初学 ...

  9. ubuntu下MySQL的安装与卸载

    1. 删除mysql a. sudo apt-get autoremove --purge mysql-server-5.0 b. sudo apt-get remove mysql-server c ...

  10. git分支管理图