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。加入一些代码,例如以下所看到的:
<?phpclass 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文件
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服务端相关推荐
- java webservice 服务器_java如何写webservice服务端
展开全部 Java 中的 Web Service 分为基于 SOAP 的和基于 REST 的两种,下面简单说一个基于 SOAP 的例子.要使用 JDK6u4 之后e69da5e6ba903231313 ...
- java cxf服务端代码_【JAVA】 cxf 生成 webservice 服务端代码
CXF Apache CXF = Celtix + XFire.CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding . ...
- SpringBoot+Axis2搭建WebService服务端
SpringBoot+Axis2搭建WebService服务端 之前用过Spring + Axis2搭建过WebService项目,网上也有很多资料教程,最近需要在一个SpringBoot项目中添加A ...
- Spring和CXF整合发布WebService(服务端、客户端)
参考Spring和CXF整合发布WebService(服务端.客户端) 转载于:https://www.cnblogs.com/timspace/p/11113576.html
- 如何发布webservice服务端
如何发布webservice服务端 还是使用jdk提供的工具进行webservice进行发布(从jdk1.6以后)对soap1.2协议支持的不是很好 使用Endpoint里面的publish方法进行发 ...
- WebService服务端与客户端开发
最近客户提出了将我们做的系统接入到他们系统之中,方便他们进行集中管理这个需求,其中主要就是运用了WebService技术来进行系统之间的接入.在此记录一下整个WebService是如何嵌入我们系统的以 ...
- 解决 -- java 调用webservice 服务端收到参数为null
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 我的客户端和服务端都写的很简单,只是调用服务的时候, 服务端得不到参数,后来发现只改一个地方就可以了 ...
- 使用CXF框架Jax-rs规范编写WebService服务端
前提是项目SSM框架搭建好. 搭建cxf框架, 一.首先,将框架所需要的jar导入,pom.xml文件中 <!-- cxf 进行rs开发 必须导入 --> <dependency&g ...
- delphi xe 文件服务器,DelphiXE7中创建WebService(服务端+客户端)
相关资料: http://www.2ccc.com/news/Html/?1507.html http://www.dfwlt.com/forum.php?mod=viewthread&tid ...
最新文章
- CVPR 2020 SLAM挑战赛冠军方案解读,搞定超难数据集TartanAir
- 高速缓冲DNS相关配置详情
- linux下查看已经安装的jdk 并卸载jdk
- 互联网协议 — FTP 文件传输协议
- 超日债违约引发大宗商品暴跌 伦铜大跌近9%
- matlab下文件夹下所有文件改名
- matplotlib散点图点大小_一步步学Matplotlib炫酷可视化(上)
- php星座判断源码,php根据日期判断星座的函数分享
- redis管道pipeline的运用
- MySQL查询更新所有满足条件的数据
- python中用于绘制各种图形的区域称作_Python--matplotlib绘图可视化知识点整理(示例代码)...
- 电脑太慢了最简单的办法怎么弄_电脑感染病毒的10种症状及简单处理办法 电脑中病毒的症状介绍...
- python加颜色_python输出带颜色字体实例方法
- 【优化算法】粒子群算法和混沌搜索协同优化算法【含Matlab源码 1299期】
- 2020 数学建模国赛 B 题参考思路
- MATLAB——tiff文件数据读取,modis
- win10 1809无法更新(扩展EFI分区)
- 人工智能(A.I.)的几个常见基础定义及发展概述
- 从西天取经的九九八十一难来看Java设计模式:模板方法模式
- Navicat数据库管理工具的基本操作