基于PHP5和Axis实现四则运算的Web服务系统

时间:2022-06-16 12:31:55

基于PHP5和Axis实现四则运算的Web服务系统

摘要:在当今Web领域,Web Services是一个实现SOA架构的新标准,以惊人的速度发展。Axis作为一个SOAP引擎,提供创建服务器端、客户端操作的基本框架。PHP5支持对SOAP的扩展,提供和调用Web Services功能。该文给出了用PHP5来调用在Axis上的四则运算Web Services的实例,并给出了客户端和服务器端的SOAP传递消息过程。

关键词:Web服务;SOA;Axis;SOAP;PHP5

中图分类号:TP393文献标识码:A文章编号:1009-3044(2010)07-1582-03

A System of Realizing Arithmetic Web Services based on PHP and Axis

YANG Nan1, ZHOU Yuan-zhe1, LI Li-feng2

(1.Department of Computer Science, Xi'an University of Posts and Telecommunications, Xi'an 710121, China; 2.Department of Applied Mathematics and Applied Physics, Xi'an University of Posts and Telecommunications, Xi'an 710121, China)

Abstract: In Web field nowadays, although Web Services is a ne w standard of realizing SOA, it has developed quickly. Axis provides a basic framework of creating operation of server-side、client-side and gateway as a SOAP engine. PHP5 supports SOAP extension, namely it can uses to provide and invoke Web Services. This paper gives an instance of invoking published arithmetic Web Services on Axis which uses PHP5, and gives the process of transferring SOAP between server-side and client-side.

key words: Web Services; SOA; Axis; SOAP; PHP5

分布式计算是近年出现的一种计算方式,Web Services作为实现分布式计算的一种新的技术,执行从简单的请求到复杂商务处理的任何功能。Web Services 开发主要分为服务的请求,服务的,服务的调用整个过程。本文设计与实现了完整的Web 服务模型,通过PHP5对原子服务的调用,体现了PHP5对web服务开发的支持。

1 Web Services模型

Web Services[1]是自包含、自描述、模块化应用,在Web中被描述、、查找以及调用。同时Web Services是基于网络的、分布式的模块化组件,执行特定的任务,遵循具体的技术规范,这些规范使得它能与其他组件进行互操作。从外部使用者角度,Web Services是一种部署在Web上的对象和组件,具有完好的封装性,松散耦合,使用的协议规范,高度可集成能力等特点。

Web Services具有如下3种标准:Web服务描述语言(Web Services Description Language, 简称WSDL),统一的描述、发现和集成(Universal Description,Discovery and Integration,简称UDDI)标准,简单对象访问协议(Simple Object Access Protocol,简称SOAP)。通过WSDLWeb服务,从而使Web服务可以被网络上的其他程序员使用,使用UDDI定位的Web服务,使用SOAP调用指定的Web服务。Web Services模型[2]如图1所示。

2 Web服务相关技术介绍

2.1 Apache Axis――服务器端

Apache Axis(Apache EXtensible Interaction System),实际上是一个SOAP引擎和SOAP服务器,能够处理各种SOAP消息和来自W3C的各种XML标准。Axis[3]提供了两种Web Services方式,一种是即时,另一种是定制。

1)即时:即时是Axis的特色之一,用户只需提供服务的Java类的源代码,即可将其迅速为Web服务。每当用户调用Web服务,Axis会自动进行编译,即使服务器重启了也不必对其做任何处理,使用非常简单快捷。

即时虽然提供了一种简单的Web Services方式,但是限制太多,因此在实际的开发中定制往往才是首选。

2)定制:通过java编写一个Web Service,把.class文件拷到%TOMCAT_HOME%\webapps\axis

WEB-INF\classes 目录下,.java文件拷到%TOMCAT_HOME%\webapps\axis\WEB-INF目

录下,编写WSDD文件(WSDD文件是用于和撤销Web service的配置文件)。

这个实例的WSDD文件为:

xmlns="/axis/wsdd/"

xmlns:java="/axis/wsdd/providers/java">

其中,标签说明这是一个wsdd项,并且定义了java的命名空间,

service元素定义了service。java:RPC定义了Axis的provider。parameter name定义了Web Service类名及所在包的位置,allowedMethods 等于*,表示Web service的所有方法都可以被调用。

将.wsdd文件放在%TOMCAT_HOME%\webapps\axis\WEB-INF,并在windows的控制台,%TOMCAT_HOME%\webapps\axis\WEB-INF目录下键入如下命令:

java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient deploy.wsdd

控制台返回Processing file deploy.wsdd 和 Done processing 说明成功,同时生成server-config.wsdd文件。

通过WSDD文件定制Web Service,主要通过AdminClient(即Axis提供的客户端管理工具)创建一个Web Service配置文件――server-config.wsdd。

2.2 php5 ――客户端

PHP(Hypertext Preprocessor)超文本预处理语言,是一种广泛应用的开放源代码的多

用途脚本语言,它可嵌入到 HTML中,尤其适合 Web开发。PHP5[4]是PHP的最新版本,具备SOAP 扩展机制,提供Web Services功能。由于SOAP扩展(ext/soap)是用C实现的,因此具有较高的运行效率。SOAP扩展主要通过在PHP5中引入了如下几个类实现的。

其中,三个高级的类:SoapClient,SoapServer,SoapFault;三个低级的类:SoapHeader,SoapParam和SoapVar。如图2所示。

SoapClient类作为Web Services的客户端,调用Web Services。SoapClient类具有两种操作方式:WSDL 模式和 Non-WSDL 模式。

在WSDL模式中,构造器可以使用WSDL文件名作为参数,并从WSDL中提取服务所使用的信息。在non-WSDL模式中,使用参数来传递要使用的信息,即使用相应的方法如SoapClient::__soapCall()来调用服务中的某个操作。

3 四则运算的Web Service的实现

在四则运算中,加减乘除运算是常见的四种运算,在本系统中写加减乘除四个原子服务进行,在客户端进行调用,整个系统作为四则运算整体服务可以实现在Web服务中的三个角色的作用:服务提供者,提供原子服务并对其进行,在axis 上,然后客户端要使用此服务,用php5进行对的服务进行调用,即可实现相应的服务请求。

此系统在客户端调用的过程中,需要使用php5中的SOAP扩展(ext/soap)[5],但是ext/soap可能已经编译但没有加载,因此需要更新 PHP 环境进行配置,以便加载 ext/soap 。编辑 php.ini 并找到 Dynamic Extensions 部分,在这里增加一行代码来自动加载该扩展。在Windows上,这一代码行是:extension=php_soap.dll

开发此模型使用的是开发集成包XAMPP(Apache+MySQL+PHP+PERL),在php.ini

文件中 ,需要去掉extension=php_soap.dll 这行注释。即可完成php语言对soap的扩展。

如果以前没有加载过任何可选的扩展,可能还要设置 extension_dir 指令,让它指向包含扩展库(其中包括 php_soap )的目录: extension_dir="C:/php/ext/"

使用SoapClient->_soapCall() 方法。SoapClient类是PHP5自带的,可以直接拿来调用Web Services。本系统主要使用的是non-WSDL模式。

用PHP5调用Web Services 的主要程序的核心代码如下:

ob_start();

try {

$client = new SoapClient('localhost:8001/axis/services/ calculateadd?wsdl');//调用的calculateadd服务

$num1=$_POST["num1"];//从页面接收参数

$num2=$_POST["num2"];

$sum = $client->__soapCall('add', array($num1,$num2));//调用服务中的add方法}

catch (Exception $e) {

printf("Message = %s",$e->__toString());}

?>

//减法,乘法,除法与加法的程序类似

…….

创建SoapClient对象时,可以使用保存在本地WSDL文件,也可以使用远程的地址,

后面的array数组里可以带上很多的参数。根据所写的服务接口返回参数来决定写什么。

调用Web Services前可以先调用SoapClient的__geunctions()和__getTypes()方法。

此系统的效果截图――以加法为例,如图3和图4所示。

4 结束语

本文介绍了基于PHP和Axis实现了服务的、请求、调用功能,java 编写服务的接口类,并通过Axis,使用PHP5中的SOAP扩展(ext/soap)调用这些的服务,并且可以直观的看出SOAP协议在客户端和服务器端的传递过程。并通过一个由四则运算服务系统的实例来实践整个过程。关于web Services的开发对于分布式计算领域的研究,商业领域如ESB,将会广泛应用,成为以后开发的热点。

参考文献:

[1] Booth D, Haas H, Mccabe F. Web Service Architecture[EB/OL]./TR /2004/NOTE2ws2 arch2 20040211 /wsa.pdf.

[2] 翟峰,郝克刚,葛玮.基于SOAP构建Axis上的Web Services[J].计算机应用与软件,2008,125(1):156-158.

[3] The Axis Development Team. Apache Axis DOCS[DB/OL]./axis.

[4] php开源社区门户[EB/OL]./.

[5] php中soap应用.CSDN技术中心[EB/OL]./.

上一篇:IPv6穿透性测试研究 下一篇:基于自相似流量的一种新的队列管理算法