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 ...
随机推荐
- 报错:this class is not key value coding-compliant for the key closeLotTextField解决方法
几种情况下都会报这种错误: 1,加载自定义的tableViewCell的时候总是死在: XInstrumentOpenCell *cell = [tableViewdequeueReusableCel ...
- 新手遇到的问题:Easy UI的对话框老是在页面载入完毕后自己主动弹出
因为是第一次接触Easy UI,还不是非常熟悉,尝试了一下对话框功能,还是非常不错的.但问题是页面载入完毕后.全部的对话框都自己主动弹出来了,百度了好久,也没有详细说明确的,貌似别人都没有这个问题哦 ...
- [转]ASP.NET Core 1.0: Using Entity Framework Core 1.0 - Transaction
本文转自:http://blog.csdn.net/alvachien/article/details/51576961 跟Entity Framework之前的版本不同,Class DbContex ...
- iOS:极光推送控制器跳转
在前面已经做完了极光消息的推送,那么有消息了,如何跳转到需要的控制器呢?其实,主要还是在userInfo这个消息里面做判断来处理,具体如下: 下面这两个是远程推送时接收消息的方法,这是应用程序提供的方 ...
- 配置Yum源repo文件及搭建本地Yum服务器
分享一篇配置Yum源repo文件及搭建本地Yum服务器的方法,希望对大家有用. Yum源的话有三大类: Base Extra Epel Base:就是你下载的光盘镜像里面的DVD1Extra:就是你下 ...
- fiddler在ios10.3系统抓包https失败原因解决
一直是按照以往的设置抓包,设置代理ip,通过Safari下载安装证书,抓包https怎么显示证书无效呢?难道证书被apple设为黑名单了?google后发现,IOS10.3以后,安装了证书不是默认启用 ...
- Struts2中的页面跳转
内容源自:Struts2中的页面跳转 一.全局页面的设置如果<package>包中的一些action都返回success,并且返回的页面都是同一个JSP页面,这样就可以配置全局的结果页面. ...
- Hadoop 伪分布式上安装 Hive
下载地址:点此链接(P.S.下载带bin的安装包) 下载hive后放到虚拟机文件夹内,打开: -bin.tar.gz -C /home/software/ 修改并保存环境配置: gedit /etc/ ...
- 转: RSA原理 阮一峰的博客
转:http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html 讲的非常细致,易懂.
- MyEclipse8.0 注册码生成代码
转自:http://blog.sina.com.cn/s/blog_7ad29e00010199xt.html package com.guaicaicc.register; import java. ...