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服务端的更多相关文章

  1. eclipse使用CXF3.1.*创建webservice服务端客户端以及客户端手机APP(二)

    eclipse使用CXF3.1.*创建webservice服务端客户端以及客户端手机APP(二) 接上篇博客,本篇博客主要包含两个内容: 4.使用Android studio创建webservice客 ...

  2. eclipse使用CXF3.1.*创建webservice服务端客户端以及客户端手机APP(一)

    eclipse使用CXF3.1.*创建webservice服务端客户端以及客户端手机APP(一) 本篇博客主要包含五个内容: 1.CXF换将搭建以及eclipse配置CXF. 2.eclipse创建w ...

  3. MyEclipse创建WebService服务端和客户端

    1.新建立一个javaWeb项目,一个java类,如图: 2.接下来我们就要将项目中的TestService的这个类生成WebService服务端,选择new Web Service,如图: Next ...

  4. myeclipse-建立webservice服务端和客户端

    一.建立webservice服务端: 1.新建一个web service project,名称为webservice_server截图如下,点击finish. 2.选择工程,点击右键,选择new-&g ...

  5. JAVA WEBSERVICE服务端&客户端的配置及调用(基于JDK)

    前言:我之前是从事C#开发的,因公司项目目前转战JAVA&ANDROID开发,由于对JAVA的各种不了解,遇到的也是重重困难.目前在做WEBSERVICE提供数据支持,看了网上相关大片的资料也 ...

  6. 根据wsdl反向生成webservice服务端(3种方法)

    前言 正常情况下,都是我们项目组创建一个webservice服务端,客户通过我们提供的wsdl地址生成客户端并进行访问:但是最近和一个国企做接口对接,他们却只提供给我们wsdl,需要我们根据wsdl生 ...

  7. 一个PHP写的简单webservice服务端+客户端

    首先是服务端,服务端有一个主要的class组成:apiServer.php <?php /** * apiServer.php * * webservice主类 * * @filename ap ...

  8. C#根据WSDL文件生成WebService服务端代码

    转自:http://www.cnblogs.com/liyi93/archive/2012/01/30/2332320.html 虽然现在已经进入了.NET FrameWork 4.0的时代,WebS ...

  9. Axis2创建WebService服务端接口+SoupUI以及Client端demo测试调用

    第一步:引入axis2相关jar包,如果是pom项目,直接在pom文件中引入依赖就好 <dependency> <groupId>org.apache.axis2</gr ...

随机推荐

  1. HDU 1864 Brave Game 【组合游戏,SG函数】

    简单取石子游戏,SG函数的简单应用. 有时间将Nim和.SG函数总结一下……暂且搁置. #include <cstdio> #include <cstring> #define ...

  2. WPF Interaction框架简介(一)——Behavior

    在WPF 4.0中,引入了一个比较实用的库——Interactions,这个库主要是通过附加属性来对UI控件注入一些新的功能,除了内置了一系列比较好用的功能外,还提供了比较良好的扩展接口.本文这里简单 ...

  3. VMware 8安装Mac OS X 10.7

    (Windows 7 X64环境下,VMware 8.0正式版)虚拟机首尝MAC OS X 10.7 Lion系统成功,特将此好消息分享.2年了,终于我也装上了Mac,我也成功的尝到了苹果味道,看着那 ...

  4. Traefik访问master节点不通的问题定位

    问题 部署traefik到客户节点的对外访问节点后,发现日志里面报错 类似于 E0122 :: reflector.go:] k8s.io/dns/vendor/k8s.io/client-go/to ...

  5. 三.rocketmq-console

    ⦁    rocketmq-console来源于https://github.com/rocketmq/rocketmq-console 1.配置IP 2.启动运行:出现此信息则表示成功  访问:in ...

  6. iOS:手势的详解UIGestureReconizer

    手势类:UIGestureReconizer   父类: 手势状态枚举 typedef NS_ENUM(NSInteger, UIGestureRecognizerState) { UIGesture ...

  7. phpstorm不安装apache就可以本地测试PHP

    最近再搞个PHP的项目,找了很多发现phpstorm这个非常小巧而且很好用,,顺便推荐一下idea开发android非常不错,这2个IDE都是一家公司的.本文由智动软件(zdexe.com)原创,转载 ...

  8. Hibernate简介与实例

    一.Hibernate简介 1.什么是Hibernate? Hibernate是数据持久层的一个轻量级框架.数据持久层的框架有很多比如:iBATIS,myBatis,Nhibernate,Siena等 ...

  9. [Functional Programming Monad] Modify The State Of A State Monad

    Using put to update our state for a given state transaction can make it difficult to modify a given ...

  10. 不用一个判断,用JS直接输出勾股数

    说明: 这里勾股数是符合a2+b2=c2的整数,比如32+42=52,52+122=132,怎么把符合条件的勾股数找出来呢?用代数替代的方法可以极大简化程序,直至一个判断都不用. 可以设a=m2-n2 ...