PHP写webservice服务端
1) WebService技术介绍
WebService是一种跨编程语言和跨操作系统平台的远程调用技术。仅仅有通过Web Service,client和server才可以自由的用HTTP进行通信。不论两个程序的平台和变成语言是什么。
XML、SOAP和WSDL是Web Service平台的三大技术:
WebService採用HTTP协议数据传输。採用XML格式封装数据,即XML中说明调用远程服务对象的哪个方法、传递的參数是什么、以及服务对象的返回结果是什么。
XML是WebService平台中表示数据的格式。除了易于建立和易于分析外,XML基本的有点在于它既是平台无关的,又是厂商无关的。
SOAP,WebService通过HTTP协议发送请求和接收结果时。发送的请求内容和结果内容都採用XML格式封装,并添加了一些特定的HTTP消息头。以说明HTTP消息的内容格式。这些特定的HTTP消息头和XML内容格式就是SOAP协议。SOAP提供了标准的RPC方法来调用Web Service。
SOAP协议 = HTTP协议 + XML数据格式。
WSDL(Web Service Description Language)是基于XML的语言。用于描写叙述Web Service及其函数、參数和返回值,它是WebServiceclient和server端都能理解的标准格式。
由于是基于XML的,所以WSDL及时机器可阅读的。又是人可阅读的。WSDL文件保存在Webserver上,通过一个url地址就能够訪问到它。client要调用一个WebService服务之前,要知道该服务的WSDL文件的地址。
WebService服务提供商能够通过两种方式来暴露它的WSDL文件地址:1、注冊到UUIDserver,以便被人查找;2、直接告诉给client调用者。
2) Apache相关配置
为了可以实现Web Service。httpd必须支持soap的扩展,这里以yum安装httpd及soap扩展为例进行说明:
1> 安装httpd
yum install httpd
2> 安装php
yum install php
3> 配置httpd支持php解析
在/etc/httpd/conf/httpd.conf中加入例如以下:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
4> 又一次启动httpd
service httpd restart
5> 检查是否安装了soap扩展
/usr/bin/php -m | grep soap //! 假设存在则说明已经安装了soap扩展,假设不存在,运行下一步
6> 安装soap扩展
yum install php-soap //! 安装完之后再次检查。重新启动httpd
7> 验证soap扩展是否正确安装
既能够通过php -m | grep soap的方式,也能够通过phpinfo();的方式。
3) PHP实现WebService服务端
1> 定义服务类——Service.php
该服务端就是实现你想要对外提供的接口,如果我们须要对外提供一个函数,它接收一个字符串。然后返回”Hello ” + 输入的字符串这个小功能,服务类非常easy,例如以下所看到的:
<? php
class Service
{
public function sayHello($content)
{
return "Hello ".$content;
}
}
?>
2> 生成wsdl文件——create_wsdl.php
为了生成wsdl文件,我们能够使用网上提供的SoapDiscovery.class.php中的getWSDL提供的方法来实现。该SoapDiscovery.class.php的代码在网上能够下载到,为了生成文件,我们须要改动getWSDL方法中的部分代码(加上写文件的代码),例如以下所看到的:
//return sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '</definitions>');
//!凝视掉return,加入例如以下代码。目的是为了调用getWSDL生成.wsdl文件
$fso = fopen($this->class_name.".wsdl", "w");
fwrite($fso, sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '</definitions>'));
fclose($fso);
如今我们就能够定义自己的create_wsdl.php了,仅仅须要调用一下这种方法就可以。例如以下:
<?php
include("Service.php");
include("SoapDiscovery.class.php");
//! 第一个參数是类名。生成的wsdl文件就是以它来命名的。第二个參数是服务的名称,能够随便写
$disco = new SoapDiscovery('Service', 'soap');
$disco->getWSDL();
? >
3> 改动服务端——Service.php
改动Service.php。加入一些代码,例如以下所看到的:
<?php
class Service
{
public function sayHello($content)
{
return "Hello ".$content;
}
} $service = new SoapServer('http://192.168.17.129/soap/Service.wsdl', array('soap_version' => SOAP_1_2));
$service->setClass("Service"); //! 注冊Service类的全部方法
$service->handle(); //! 处理请求
?>
4> 改动Service.wsdl文件
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaG91cWQyMDEy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
5> 客户端測试——client.php
client.php用来測试我们刚写的Web Server的服务端是否能可用,代码例如以下:
<? php
$soap = new SoapClient('http://192.168.17.129/soap/Service.php? wsdl');
echo $soap->sayHello("houqd2012");
?>
输出结果例如以下:
Hello houqd2012
PHP写webservice服务端的更多相关文章
- eclipse使用CXF3.1.*创建webservice服务端客户端以及客户端手机APP(二)
eclipse使用CXF3.1.*创建webservice服务端客户端以及客户端手机APP(二) 接上篇博客,本篇博客主要包含两个内容: 4.使用Android studio创建webservice客 ...
- eclipse使用CXF3.1.*创建webservice服务端客户端以及客户端手机APP(一)
eclipse使用CXF3.1.*创建webservice服务端客户端以及客户端手机APP(一) 本篇博客主要包含五个内容: 1.CXF换将搭建以及eclipse配置CXF. 2.eclipse创建w ...
- MyEclipse创建WebService服务端和客户端
1.新建立一个javaWeb项目,一个java类,如图: 2.接下来我们就要将项目中的TestService的这个类生成WebService服务端,选择new Web Service,如图: Next ...
- myeclipse-建立webservice服务端和客户端
一.建立webservice服务端: 1.新建一个web service project,名称为webservice_server截图如下,点击finish. 2.选择工程,点击右键,选择new-&g ...
- JAVA WEBSERVICE服务端&客户端的配置及调用(基于JDK)
前言:我之前是从事C#开发的,因公司项目目前转战JAVA&ANDROID开发,由于对JAVA的各种不了解,遇到的也是重重困难.目前在做WEBSERVICE提供数据支持,看了网上相关大片的资料也 ...
- 根据wsdl反向生成webservice服务端(3种方法)
前言 正常情况下,都是我们项目组创建一个webservice服务端,客户通过我们提供的wsdl地址生成客户端并进行访问:但是最近和一个国企做接口对接,他们却只提供给我们wsdl,需要我们根据wsdl生 ...
- 一个PHP写的简单webservice服务端+客户端
首先是服务端,服务端有一个主要的class组成:apiServer.php <?php /** * apiServer.php * * webservice主类 * * @filename ap ...
- C#根据WSDL文件生成WebService服务端代码
转自:http://www.cnblogs.com/liyi93/archive/2012/01/30/2332320.html 虽然现在已经进入了.NET FrameWork 4.0的时代,WebS ...
- Axis2创建WebService服务端接口+SoupUI以及Client端demo测试调用
第一步:引入axis2相关jar包,如果是pom项目,直接在pom文件中引入依赖就好 <dependency> <groupId>org.apache.axis2</gr ...
随机推荐
- CSS揭秘之多重边框&连续的图像边框
1.多重边框 我们可以通过使用border-image来写一个多重边框,或使用多个元素来模拟多重边框,不过我们有更好的办法来制作一个多重边框,那就是使用box-shadow的第四个参数(称为扩张半径) ...
- JavaScript基础入门教程(五)
说明 本系列博客的第一篇已经说明了,要求阅读者需要具有其它语言的编程基础,所以关于组数的基础部分本篇博客将不再赘述,主要讲js中数组的特性. 创建数组 数组的创建主要有两种方法,一种是数组直接量,还有 ...
- Unity3d-Socket之龙一编年史network.dll分析(2)-> CNetLogger
今天呢,我们来学习下network.dll里面的CNetLogger类. 顾名思义,这个类主要是debug用的,也许有些人会问了,干嘛要自己封装个debug,直接用unity自带的debug不就好了吗 ...
- jQuery中,选择器既匹配开头又匹配结尾
jQuery中,选择器既匹配开头又匹配结尾的方法: [attr^=val]attr$=val [attr^=val][attr$=val]
- [转]Configure logging in SSIS packages
本文转自:http://learnsqlwithbru.com/2009/11/26/configure-logging-in-ssis-packages/ n this article we wil ...
- iOS:操作队列实现多线程NSOperation
NSOperation具体使用:直接继承NSObject 它的子类有:NSBlockOperation.NSInvocationOperation 还有一个必须的类,队列,用来装创建的线程 NSOpe ...
- 流畅的python第十九章元编程学习记录
在 Python 中,数据的属性和处理数据的方法统称属性(attribute).其实,方法只是可调用的属性.除了这二者之外,我们还可以创建特性(property),在不改变类接口的前提下,使用存取方法 ...
- NormalMap 贴图 【转】
转载: http://www.zwqxin.com/archives/shaderglsl/review-normal-map-bump-map.html 说起Normal Map(法线贴图),就 ...
- 详解vue静态资源打包中的坑与解决方案
本文主要解决: 1.vue-cli默认配置打包后部署至特定路径下静态资源路径错误问题; 2.静态资源打包使用相对路径后css文件引入图片路径错误问题. 一.问题 vue-cli 脚手架生成的默认打包配 ...
- JQuery选择器中的一些注意事项
1. 选择器中含有特殊符号的注意事项 1. 1 选择器中含有",","#","("或"]"等特殊字符 根据w3c的规定, ...