Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。Web Service是自描述、 自包含的可用网络模块, 可以执行具体的业务功能。Web Service也很容易部署, 因为它们基于一些常规的产业标准以及已有的一些技术,诸如标准通用标记语言下的子集XML、HTTP。Web Service减少了应用接口的花费。Web Service为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制。[1]

  WSDL,网络服务描述语言是一个用来描述Web服务和说明如何与Web服务通信的XML(标准通用标记语言的子集)语言。为用户提供详细的接口说明书。[2]

1、Seb Service 公共接口的使用

  Web Service技术应用已经非常广泛,使用java调用比较方便,在eclipse中新建Web Service Client根据向导配置即可,如图:

  在PHP中使用则相对比较复杂一点,网上也有朋友开源的PHP 写的WSDLInterpreter等,其实PHP自身有SoapClient类可以直接使用,下面的就是摘自http://www.zendstudio.net/[3]

<?php
/**
* 从开放的天气预报服务中获得数据
*
**/ $c = new SoapClient( 'http://www.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl',
array( 'trace' => true, 'exceptions' => true ) ); //查看接口中的方法
//var_dump( $c->__getFunctions() );
//查看接口方法的使用
//var_dump( $c->__getTypes() );
//不需要参数的情况
$pr =$c->getRegionProvince();
//var_dump( $pr->getRegionProvinceResult->string ); //带有参数的情况
$scs = $c->getSupportCityString( array( 'theRegionCode' => '福建' ) );
var_dump( $scs->getSupportCityStringResult->string ); //也可以这样做
$we = $c->__call('getWeather', array( array( 'theCityCode' => 2210 ) ) );
var_dump( $we );
?>

2、相关扩展

(下面都是借花献佛的摘抄了)[3]

1) 实现php的soapServer和SoapClient
服务端:

<?php
$ss = new SoapServer( null, array( 'uri' => 'http://zendstudio.Net' ) );
$ss->setClass( 't', '参数1', '参数2' );
$ss->handle();
//$request = file_get_contents( 'php://input' );
//file_put_contents( 'request.txt', $request );
class t{ function __construct( $p1, $p2 ){ } function im8( $g ){
return 'OK----'. $g;
} }
?>

客户端:

<?php
$ss = new SoapClient( null, array( 'uri' => 'http://zendstudio.Net', 'location' => 'http://localhost/soap.php' ) );
$header = new SoapHeader( 'zendHeader', 'mmcYY', '12345678' );
$ss->__setSoapHeaders( $header );
echo $ss->im8( 'gently' );
?>

2) 在php的soap客户端和服务端添加SoapHeader头
实例化一个SoapHeader,然后使用SoapServer的addSoapHeader方法添加进去即可,这个头一般是学习php soap的一个难点,通常我们做的最多的是用soap的方式和其他程序通信,用php如何构造soapheader显得有些不容易,以至于依赖于这个头的服务端总是返回不正确。

3) 从php的服务端如何获取SoapHeader
这个大概就是很多人认为php对soap支持不完整的一个原因,目前的php版本无法直接获取SoapHeader,因此我想了一个笨方法,先通过使用php://input,获取所有POST上来的数据,然后使用正则表达式分离出SoapHeader的XML部分,然后再整理出想要的格式。

另外,在PHP的SoapServer端可以通过转存$_SERVER和上面讲到的php://input获取soap的“原始”通信内容。

参考:

[1] Web Service[EB/OL].[2014-04-01].http://baike.baidu.com/link?url=61fuMHphEG7AgK40xVxpvVnT5dlJSqFEVGN9LpsRGGXg87sdw_clM7ov8SCOioVyAZH8ZtA1_3SAopPE5y2dza

[2] WSDL[EB/OL].[2014-04-01].http://baike.baidu.com/link?url=HgL3uLMQMa8FF1Kwe5pmu_ejvmdzxXm3R0uT0P61LveNcdDYhfL7RRn0DaJZEKQZ

[3] 入门级的讲讲soap这个php webservice[EB/OL].[2014-04-01].http://www.zendstudio.net/archives/php-webservice-soap/

PHP中的WebService的更多相关文章

  1. 在Android中调用WebService

    某些情况下我们可能需要与Mysql或者Oracle数据库进行数据交互,有些朋友的第一反应就是直接在Android中加载驱动然后进行数据的增删改查.我个人不推荐这种做法,一是手机毕竟不是电脑,操作大量数 ...

  2. 如何开发Domino中的WebService

    在domino中写webservice可以使用LotusScript,也可以使用java,由于LotusScript API提供的功能多数都是操作domino数据库中文档的,在web service中 ...

  3. 用JAX-WS在Tomcat中公布WebService

    JDK中已经内置了Webservice公布,只是要用Tomcat等Webserver公布WebService,还须要用第三方Webservice框架. Axis2和CXF是眼下最流行的Webservi ...

  4. 在VS中实现webService的一个demo(图解)

    在VS中实现webService的一个demo(图解) 先创建一个web项目,创建好web项目后,添加新建项——web服务 在新建好的web服务文件中写如下代码: 生成当前解决方案. 新建一个winf ...

  5. 你真的了解JAVA中与Webservice相关的规范和实现吗?

    非常多人在项目中使用Webservice,仅仅是知道怎样公布Webservice,怎样调用Webservice,但真要论其来龙去脉,还真不一定清楚. 一切一切还要从我们伟大的sun公司规范说起. JA ...

  6. 存储过程中调用webservice

    存储过程中调用webservice其实是在数据库中利用系统函数调用OLE. 1.查找webservice api 可得到MSSOAP.SoapClient. 2.查找API 接口可得到mssoapin ...

  7. Android使用ksoap2调用C#中的webservice实现图像上传

    目录: 一. android使用ksoap2调用webservice 二. 异步调用 三. Android使用ksoap2调用C#中的webservice实现图像上传参考方法 四. 图像传输中Base ...

  8. 用JAX-WS在Tomcat中发布WebService

    JDK中已经内置了Webservice发布,不过要用Tomcat等Web服务器发布WebService,还需要用第三方Webservice框架.Axis2和CXF是目前最流行的Webservice框架 ...

  9. C++程序中调用WebService的实现

    前言 因为最近的项目中需要运用到在MFC程序中调用WebService里面集成好了的函数,所以特意花了一天的时间来研究WebService的构建以及如何在MFC的程序中添加Web引用,进而来实现在C+ ...

  10. java web项目(spring项目)中集成webservice ,实现对外开放接口

    什么是WebService?webService小示例 点此了解 下面进入正题: Javaweb项目(spring项目)中集成webservice ,实现对外开放接口步骤: 准备: 采用与spring ...

随机推荐

  1. C语言学习笔记 (002) - C++中引用和指针的区别(转载)

    下面用通俗易懂的话来概述一下: 指针-对于一个类型T,T*就是指向T的指针类型,也即一个T*类型的变量能够保存一个T对象的地址,而类型T是可以加一些限定词的,如const.volatile等等.见下图 ...

  2. linux下开启https

    1.在线安装mod_ssl yum -y install mod_ssl 查看openssl 是否安装成功 rpm -qa |grep openssl 2.建立服务器密钥 openssl genrsa ...

  3. .NET跨平台实践:用C#开发Linux守护进程-Daemon

    Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon也能在后台正常工作. 一句话,为L ...

  4. Swift 构造与析构

    前言 与 OC 一样,Swift 中也存在构造和析构过程.不同的是,OC 中的构造方法和析构方法只是普通的方法,而 Swift 中构造器和析构器是一种特殊的结构. 1.构造器 在 Swift 中,类或 ...

  5. mysql升级5.5

    对付Linux的问题,其实很多都是权限问题,细心想一下即可. centos6.4默认装的是mysql5.1,使用 yum update 也update不了.google了一下,找到个yum安装的方法: ...

  6. Android适配底部返回键等虚拟键盘的完美解决方案

    这个问题来来回回困扰了我很久,一直没能妥善解决. 场景1:华为手机遮挡了屏幕底部. 场景2:进入应用时,虚拟键自动缩回,留下空白区域. 需求: 需要安卓能自适应底部虚拟按键,用户隐藏虚拟按键时应用要占 ...

  7. 从sys/power/state分析并实现S3C2416的睡眠和唤醒

    环境: PC: debian-7.6.0 ARM CPU: S3C2416 Linux-Kernel: 3.6.0(FriendlyARM) U-boot: 1.3.4 一.问题来源 依据须要,在S3 ...

  8. 上传下载 demo

    import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; import org.springf ...

  9. 解决ssh连接慢(有时候等半分钟才出现密码输入提示)的方法

    经常通过ssh 或者 scp 连接一堆远程主机,同样是 Linux 主机,其中一些创建 ssh 连接速度特别慢,连接建立之后执行操作速度却很正常,看来应该不是网络原因.解决的方法是通过ssh 的-v参 ...

  10. processing fill()和stroke()函数

    在procesiing有两个基本的函数,fill()和stroke()函数,这两个函数分别用来控制形状填充颜色和形状轮廓的颜色,fill()和stroke()可以接受的参数的个数为1,2,3.当参数的 ...