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. QT样式表

    QT样式表 一.QT样式表简介 1.QT样式表简介 QSS的主要功能是使界面的表现与界面的元素分离,使得设计皮肤与界面控件分离的软件成为可能. QT样式表是允许用户定制widgets组件外观的强大机制 ...

  2. CF712E Memory and Casinos 期望概率

    题意:\(n\)个赌场,每个赌场有\(p_{i}\)的胜率,如果赢了就走到下一个赌场,输了就退回上一个赌场,规定\(1\)号赌场的上一个是\(0\)号赌场,\(n\)号赌场的下一个是\(n + 1\) ...

  3. 【BZOJ3625/CF438E】小朋友和二叉树(多项式求逆,多项式开方)

    [BZOJ3625/CF438E]小朋友和二叉树(多项式求逆,多项式开方) 题面 BZOJ CodeForces 大致题意: 对于每个数出现的次数对应的多项式\(A(x)\) 求\[f(x)=\fra ...

  4. 【BZOJ1458】【洛谷4311】士兵占领(网络流)

    [BZOJ1458][洛谷4311]士兵占领(网络流) 题面 BZOJ权限题,洛谷真好 Description 有一个M * N的棋盘,有的格子是障碍.现在你要选择一些格子来放置一些士兵,一个格子里最 ...

  5. Win10如何搭建FTP服务器以实现快速传输文件

    原文链接地址:http://blog.csdn.net/bai_langtao/article/details/77751447 Win10如何搭建FTP服务器以实现快速传输文件?相信大家在工作或生活 ...

  6. 【bzoj2006】【NOI2015】超级钢琴

    2006: [NOI2010]超级钢琴 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 4292  Solved: 2195[Submit][Statu ...

  7. laravel添加日常备份任务

    app/Console/Command/MySqlDump.php <?php namespace App\Console\Commands; use Illuminate\Console\Co ...

  8. webstorm 激活破解方法大全

    webstorm 作为最近最火的前端开发工具,也确实对得起那个价格,但是秉着勤俭节约的传统美德,我们肯定是能省则省啊. 方法一:(更新时间:2018/1/23)v3.3 注册时,在打开的License ...

  9. CSS常用标签-手打抄录-感谢原未知博主-拜谢了

    CSS常用标签   CSS常用标签 一 CSS文字属性 color : #999999; /*文字颜色*/ font-family : 宋体,sans-serif; /*文字字体*/ font-siz ...

  10. oracle分析函数 (转)

    一.总体介绍 12.1 分析函数如何工作 语法 FUNCTION_NAME(<参数>,…) OVER (<PARTITION BY 表达式,…> <ORDER BY 表达 ...