简单对象访问协议(SOAP)是一种轻量的、简单的、基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息。 SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。

PHP有两个扩展可以实现web service,一个是NuSoap,一个是php官方的soap扩展,由于soap是官方的,所以我们这里以soap来实现web service。由于默认是没有打开soap扩展的,所以自己先看一下soap扩展有没有打开。

在soap编写web service的过程中主要用到了SoapServer,SoapClient,SoapFault三个类:

一、SoapServer类
1.这个类可以用来提供Web services。SoapServer有两种操作模式:

* WSDL 模式:构造器可以使用WSDL文件名作为参数,并从WSDL文件中提取服务所使用的信息(使用Zend Studio可生成wsdl文件)。
  * Non-WSDL 模式:使用参数来传递要使用的信息(本文就以此模式演示)。

在WSDL模式中,服务实现了WSDL提供的接口;在non-WSDL模式中,参数被用来管理服务的行为。

2.$soapServer = new SoapServer( mixed $wsdl [, array $options ]);
  参数1: $wsdl    如果使用wsdl模式就给值为wsdl文件所在URI路径,否则如不使用wsdl模式就给值null,在第2个参数$options中给服务器传递对应值;
 
  参数2: $options 此参数为数组类型,可以设置如:版本、编码及URI等参数。
         如: array('soap_version' => SOAP_1_2, 'actor' =>'http://example.org/ts-tests/C', 'encoding'=>'utf8','location'=>'http://test-uri/url', 'uri' => 'http://test-uri/')
         通常给出uri参数即可,uri参数代表命名空间,客户端location必须提供,而服务端的location是选择性的,可以不提供;

可用方法函数列表:
  1 __construct
     作用:创建 SoapServer 对象
     用法:__construct ( mixed wsdl [, array options] )
     参数:wsdl 文件地址,options soap_version,encoding,actor,classmap
     返回:对象

2 addFunction
     作用:为客户端导出一个或多个函数
     用法:addFunction ( mixed functions )
     参数:functions 函数,一个或多个,全部 SOAP_FUNCTIONS_ALL
     返回:无

3 getFunctions
     作用:获取全部函数
     用法:getFunctions ()
     参数:无
     返回:函数数组

4 setClass
     作用:导出类中的全部函数
     用法:setClass ( string class_name [, mixed args [, mixed ...]] )
     参数:class_name 类名 args 参数
     返回:无

5 setPersistence
     作用:允许保存在PHP之间的会话(SESSION)请求数据
     用法:setPersistence ( int mode )
     参数:mode SOAP_PERSISTENCE_SESSION SOAP_PERSISTENCE_REQUEST
     返回:无

6 fault
     作用:出错处理方法
     用法:fault ( string code, string string [, string actor [, mixed details [, string name]]] )
     参数:code 错误代码 string 简短错误信息 actor 导致错误的字符串 details 错误详细信息
     返回:无

7 handle ( [string soap_request] )
     作用:处理一个SOAP请求,调用必要的功能,并发送回一个响应。
     用法:handle ( [string soap_request] )
     参数:soap_request 请求
     返回:无

在SoapServer类的众多方法中,有三个方法比较重要。它们是: SoapServer::setClass(),SoapServer::addFunction()和SoapServer::handle()。

3.两种模式的使用示例:
  WSDL 模式:     $soapServer = new SoapServer('http://example.com/xxx/someName.wsdl',array('uri' => 'http://test-uri/'));
  Non-WSDL 模式: $soapServer = new SoapServer(null,array('uri' => 'http://test-uri/'));

SoapServer类方法:
  $soapServer>setClass('{你的类名}');          //注册class
  $soapServer>addFunction('{你的函数名}');     //添加自定义函数
  $soapServer>addFunction(SOAP_FUNCTIONS_ALL); //添加当前主机环境配置的所有PHP可用函数(主要应用于跨语言调用时,使对方语言也可使用PHP函数)
  $soapServer>handle();                        //处理一个SOAP请求,调用必要的功能,并发送回一个响应

注:setClass() 与 addFunction() 不可同时使用,不知道为什么~~~~

二、SoapClient类
1.这个类也是有对应的两种操作形式:
  * WSDL 模式
  * Non-WSDL 模式

2.$soapClient = new SoapClient( mixed $wsdl [, array $options ]);
  参数1,解释同上,略.....
  参数1,通常给出location和uri参数即可,uri参数代表命名空间,客户端location必须提供,而服务端的location是选择性的,可以不提供;
         location代表SoapServer的php文件的URL位置;

可用方法函数列表:
  1 __construct
     作用:创建 SoapClient 对象
     用法:__construct ( mixed wsdl [, array options] )
     参数:wsdl 文件地址 或 null,
     options
      a、soap_version soap版本,encoding 编码,compression 压缩,classmap
      b、http身份验证 :login , password
      c、代理服务:proxy_host, proxy_port, proxy_login and proxy_password
      d、证书验证:local_cert , passphrase
      e、wsdl 为null 时:location , uri
     返回:对象

2 __call
     作用:调用函数
     用法:__call ( string function_name, array arguments [, array options [, array input_headers [, array output_headers]]] )
     参数:function_name,arguments
     返回:无

3 __doRequest
     作用:在执行HTTP请求
     用法:__doRequest ( string request, string location, string action, int version [, int one_way] )
     参数:request XML的SOAP请求 location 请求地址 action ,version
     返回:字符串

4 __getFunctions
     作用:获取全部方法
     用法:__getFunctions()
     参数:无
     返回:函数数组

5 __setCookie
     作用:设置cookie
     用法:__setCookie ( string name [, string value] )
     参数:name cookie名称 value cookie值
     返回:无

6 __getLastRequest
     作用:获取最后的请求
     用法:__getLastRequest ()
     参数:无
     返回:最后的请求

7 __getLastRequestHeaders
     作用:获取最后的请求头部信息
     用法:__getLastRequestHeaders ()
     参数:无
     返回:最后的请求头部信息

8 __getLastResponse
     作用:获取最后的回应
     用法:__getLastRequest ()
     参数:无
     返回:最后的请求回应

9 __getLastResponseHeaders
     作用:获取最后的回应头部信息
     用法:__getLastResponseHeaders ()
     参数:无
     返回:最后的回应头部信息

3.两种模式的使用示例:
  WSDL 模式:     $soapClient = new SoapClient('http://example.com/xxx/someName.wsdl',array('encoding'=>'utf8'));
  Non-WSDL 模式: $soapClient = new SoapClient(null,array('location'=>'http://test-uri/url','uri' => 'http://test-uri/'));

三、SoapFault类是出错处理类

参考文档: http://blog.csdn.net/binyao02123202/article/details/5681445
             http://blog.csdn.net/binyao02123202/article/details/5681500

四、demo示例

<?php
//server端
session_start(); $uri = '127.0.0.1';
$soapServer=new SoapServer(null,array('uri'=>$uri));
$soapServer->setClass('Persion'); //注册class
$soapServer->handle(); //发送应答,处理SOAP请求 /**
* 定义一个名称Persion的类
* @param 无
* @return 无
* @author martinzhang
*/
class Persion{
public $name = '张三'; public function __construct(){ } /**
* 获取名称
* @param 无
* @return 返回当前name
* @author martinzhang
*/
public function getName(){
return $this->name;
} /**
* 接收客户端传递来的数据,并写入服务器文件或数据库
* @param setname 客户端传递来的名字
* @return int 写入文件的字节数
* @author martinzhang
*/
public function putName($putname){
return file_put_contents('./namelist.txt',$putname,FILE_APPEND); //追加写入
} /**
* 透传PHP内置函数 - strlen()
* @param string 待检查的字符串
* @return int 返回字符串长度
* @author martinzhang
*/
public function soapStrlen($string){
return strlen($string);
} }
<?php
//client端 header('Content-Type:text/html;charset=UTF-8'); $location = 'http://others.com/0_module/0/PHP/webservice/class_serverSoap.php';
$uri = '127.0.0.1';
try{
$soapClient = new SoapClient(null,array('location'=>$location,'uri'=>$uri));
echo $soapClient->getName();
echo '<br />';
echo $soapClient->putName("lisiwangwu\n");
echo '<br />';
echo $soapClient->soapStrlen('abcd'); //相当于使用了strlen()函数
echo '<br />'; }catch(SoapFault $fault){
echo 'Error:'.$fault->faultcode.',String:'.$fault->faultstring; }

PHP基于SOAP实现webservice的更多相关文章

  1. python发布及调用基于SOAP的webservice

    现如今面向服务(SOA)的架构设计已经成为主流,把公用的服务打包成一个个webservice供各方调用是一种非常常用的做法,而应用最广泛的则是基于SOAP协议和wsdl的webservice.本文讲解 ...

  2. 使用sproxy.exe访问基于soap的webservice

    使用vc访问基于soap的webservice有多种方法,其中有一种是使用atlsoap,关于这个可以搜索sproxy.exe文章,不在这介绍(主要是我的写作能力太差).我写这个日记主要是项记录访问w ...

  3. 第二篇:利用shell脚本执行webservice请求——基于soap

    1. 项目背景 以往我们在开发基于webservice的项目中,我们总习惯于直接使用webservice的一些框架,如Axis,axis2和Xfire等.框架的好处是将webservice所涉及到的s ...

  4. 使用CXF实现基于Soap协议的WebService

    本文介绍使用CXF实现基于Soap协议的WebService(CXF的版本是3.0.0) 一. 前言 Java有三种WebService规范:Jax-WS,Jax-RS,Jaxm 1. Jax-WS( ...

  5. 【转】基于CXF Java 搭建Web Service (Restful Web Service与基于SOAP的Web Service混合方案)

    转载:http://www.cnblogs.com/windwithlife/archive/2013/03/03/2942157.html 一,选择一个合适的,Web开发环境: 我选择的是Eclip ...

  6. 【转】构建基于CXF的WebService服务

    构建基于CXF的WebService服务 Apache CXF = Celtix+ XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF.C ...

  7. 基于soapUI构建WebService测试框架

    基于soapUI构建WebService测试框架 http://www.docin.com/p-775523285.html

  8. 基于.NET的WebService的实现和WCF的实现

    1.新建一个MVC web项目. 2.点击项目,[右键]→[添加]→[新建项] 3.点击[Web]→[Web服务] 4.恭喜,Web Service已经新建成功,里面的方法就可以参考着根据自己的需要进 ...

  9. 基于Jws的WebService项目

    基于Jws的WebService项目   1.服务器端建立 1.1.创建接口 [java] view plaincopy @WebService  public interface IWebServi ...

随机推荐

  1. PAT (Basic Level) Practise:1026. 程序运行时间

    [题目链接] 要获得一个C语言程序的运行时间,常用的方法是调用头文件time.h,其中提供了clock()函数,可以捕捉从程序开始运行到clock()被调用时所耗费的时间.这个时间单位是clock t ...

  2. POJ-1743 Musical Theme(后缀数组)

    题目大意:给一个整数序列,找出最长的连续变化相同的.至少出现两次并且不相重叠一个子序列. 题目分析:二分枚举长度进行判定. 代码如下: # include<iostream> # incl ...

  3. asp.net使用My97 Date Picker时设置默认起始时间为n年之前的今天

    可以使用My97 Date Picker组件来收集用户输入的日期值. 首先下载该组件:http://www.my97.net/dp/index.asp放到自己的项目中. 然后在项目里面引用js和css ...

  4. SpringMVC学习系列(1) 之 初识SpringMVC

    1.前言: 与SpringMVC的结识源于个人之前想做一个微信公众账号的管理平台玩玩,既然要做就需要考虑平台的选择问题.由于我的朋友只有一台运行了Linux系统的虚拟主机,且上面还运行有他自己的一些论 ...

  5. [zz] demand ,require ,request用法辨析

    http://zhidao.baidu.com/link?url=9Q50HiOF1fWav1nSnREbc_H1jTuAHxAjeVLbZoB5bGO3ZehPxLhQdob4oGO3slMRl0W ...

  6. Linux系统性能和使用活动监控工具 sysstat

    Sysstat是一个非常方便的工具,它带有众多的系统资源监控工具,用于监控系统的性能和使用情况.我们在日常使用的工具中有相当一部分是来自sysstat工具包的.同时,它还提供了一种使用cron表达式来 ...

  7. 再看静态static及相关知识汇集

    在C#程序中,没有全局变量的概念,这意味着所有的成员变量只有该类的实例才能操作这些数据,这起到了“信息隐藏”的作用.但有些时候,这样做却不是个明智的选择.C#中静态变量——它在类中类似全局变量,保存类 ...

  8. (转)pdf文件结构

    PDF文件结构(一)  ————物理结构 PDF(Portable   Document   Format,便携式文档结构)是一种很有用的文件格式,其最大的特点是平台无关而且功能强大(支持文字/图象/ ...

  9. [ActionScript 3.0] AS3.0 火焰效果

    package { import flash.display.Sprite; import flash.display.* import flash.events.Event; import flas ...

  10. django Q和F查询

    Q查询——对对象的复杂查询F查询——专门取对象中某列值的操作 Q查询1.Q对象(django.db.models.Q)可以对关键字参数进行封装,从而更好地应用多个查询,例如: from django. ...