700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 利用PHP SOAP实现web service

利用PHP SOAP实现web service

时间:2020-06-17 18:28:08

相关推荐

利用PHP SOAP实现web service

一 什么是SOAP?可以做什么?

SOAP 指简单对象访问协议,它是一种基于XML的消息通讯格式,用于网络上,不同平台,不同语言的应用程序间的通讯。可自定义,易于扩展。一条 SOAP 消息就是一个普通的 XML 文档,包含下列元素:

• Envelope 元素,标识XML 文档一条 SOAP 消息

• Header 元素,包含头部信息的XML标签

• Body 元素,包含所有的调用和响应的主体信息的标签

• Fault 元素,错误信息标签。

二 什么是WSDL?可以做什么?

WSDL 指网络服务描述语言。是一种基于XML编写的文档。为用户提供详细的接口说明书。

怎样向别人介绍你的Web服务(Web Service)有哪些功能,以及每个函数调用时的参数呢?你可能会自己写一套文档,甚至可能会口头告诉使用你Web服务的人。

这些非正式的的方法至少都有一个严重的问题:当程序员坐到电脑前,想要使用你的Web服务的时候,他们的开放环境无法给他们提供任何帮助,因为这些工具根本不了解你的Web服务.

解决方法是:用机器能阅读的方式提供一个正式的描述文档。Web服务描述语言(WSDL)就是这样一个基于XML的语言。用于描述Web服务及其函数,参数,返回值。因是基于XML,所以WSDL即使机器可阅读,又是人可阅读的。

三 利用PHP SOAP实例Web Service

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

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

SoapClient类

这个类用来使用Web services。SoapClient类可以作为给定Web services的客户端。

它有两种操作形式:

* WSDL 模式

* Non-WSDL 模式

在WSDL模式中,构造器可以使用WSDL文件名作为参数,并从WSDL中提取服务所使用的信息。

non-WSDL模式中使用参数来传递要使用的信息。

SoapServer类

这个类可以用来提供Web services。与SoapClient类似,SoapServer也有两种操作模式:WSDL模式和non-WSDL模式。这两种模式的意义跟 SoapClient的两种模式一样。在WSDL模式中,服务实现了WSDL提供的接口;在non-WSDL模式中,参数被用来管理服务的行为。

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

四 实例

定义一个提供服务的php类,这个类所提供的函数就是web service对外提供的服务

Class PersonInfo{/*** 返回姓名* @return string **/public function getName($name){return "My Name is " . $name;}}

下面给出服务器端的代码:

//包含提供服务的类进来include 'test.php';/*创建soap服务端参数1 : wsdl的URL地址,如果不是wsdl模式,传个NULL参数2 : 如果是wsdl模式,可以不传.如果不是wsdl模式,传个数组.定义个uri子单元.*/$s = new SoapServer(null,array("uri"=>"此处随便写,只是命名空间"));//设置用于处理SOAP请求的类$s -> setClass("PersonInfo");//处理请求$s -> handle();

下面给出客户端的代码:

try{//创建soap的客户端//参数1 wdsl地址//参数2[location] 处理soap请求的地址. //参数2[uri] 命名空间$soap = new SoapClient(null,array('location'=>"http://localhost/test2.php",'uri'=>'hwhwthhsdhg'));//两种调用方式,直接调用方法,和用__soapCall调用echo $r = $soap->getName('tlijian1989'); }catch(SoapFault $e){echo $e->getMessage();}catch(Exception $e){echo $e->getMessage();}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。