1. php 实现 soap

php有两个扩展可以实现web service,一个是NuSoap,一个是php 官方的soap扩展,由于soap是官方的,
所以我们这里以soap来实现web service.
由于默认是没有打开soap扩展的,所以自己先看一下soap扩展有没有打开。在soap编写web service的过程中主要用到了SoapClient,SoapServer,SoapFault三个类。

SoapClient类:
这个类用来使用Web services。SoapClient类可以作为给定Web services的客户端。
它有两种操作形式:

  • WSDL 模式
  • Non-WSDL 模式

在WSDL模式中,构造器可以使用WSDL文件名作为参数,并从WSDL中提取服务所使用的信息。

non-WSDL模式中使用参数来传递要使用的信息。


SoapServer类:

这个类可以用来提供Web services。与SoapClient类似,SoapServer也有两种操作模式:
WSDL模式和non-WSDL模式。这两种模式的意义跟 SoapClient的
两种模式一样。在WSDL模式中,服务实现了WSDL提供的接口;
在non-WSDL模式中,参数被用来管理服务的行为。在SoapServer类的众多方法中,有三个方法比较重要。它们是SoapServer::setClass(),SoapServer::addFunction()和SoapServer::handle()。 

PersonInfo.php

<?phpclass PersonInfo
{public function getName($a){return 'My name is wjh ::' . $a;}
}

client.php

<?phptry {// 1. wsdl 方式//wsdl方式调用web service//wsdl方式中由于wsdl文件写定了,如果发生添加删除函数等操作改动,不会反应到wsdl,相对non-wsdl方式,来说不够灵活//$soap = new SoapClient("http://localhost/Test/MyService/PersonInfo.wsdl");//2. no-wsdl 方式//non-wsdl方式调用web service//在non-wsdl方式中option location系必须提供的,而服务端的location是选择性的,可以不提供$soap = new SoapClient(null,array('location'=>'http://studio.local/test/server.php','uri'=>'server.php'));//直接调用,和间接调用(__soapCall)$result1 = $soap->__soapCall('getName',array('a'=>'hahahah'));$result2 = $soap->getName('wwwwwwwww');echo $result1 . '<br/>';echo $result2;
} catch (SoapFault $e) {echo $e->getMessage();
}

server.php

<?php require_once ('PersonInfo.php'); //1. wsdl 方式 //$soap = new SoapServer('PersonInfo.wsdl'); //2. no-wsdl 方式 //non-wsdl方式中服务端的location是选择性的,可以不提供,客户端 必须提供,即一下两种方式都可以 $soap = new SoapServer(null,array("uri"=>"server.php")); //$soap = new SoapServer(null,array('location'=>'http://studio.local/test/server.php','uri'=>'server.php')); $soap->setClass('PersonInfo'); $soap->handle();

服务器端代码:

mainservice.php<?php//其中uri相当于java中的命名空间,可以是任何不和别人重合的字符串,第一个参数是wsdl,如果不使用wsdl则使用null,第三个参数表示soap的版本号,目前就两个版本号$wbServer= new SoapServer(null, array('uri'=>'textphpwebservice','soap_version'=>SOAP_1_2));
$wbServer->addFunction('sayhello');
$wbServer->addFunction('mymin');
$wbServer->handle();function sayhello($name){return "hello ".$name."you are great!";
}function mymin($a,$b){return $a>$b?$b:$a;
}
exit();
?>

客户端代码:

client.php<?phptry{//第一个参数是wsdl文件,不使用的话用null,location表示webservice服务文件的地址,uri要用要调用的webserivce中的uri一致$client=new SoapClient(null,array('location'=>'http://studio.local/mainservice.php','uri'=>'textphpwebservice'));echo $client->sayhello("lijh")."
";echo $client->mymin(100,50)."ccccc";
}catch(SoapFault $fault){echo "fail";
}exit();

有 wsdl 情况:

client.php<?php
ini_set("soap.wsdl_cache_enabled", "0");
header('content-type:text/html;charset=utf-8');
$client=new SoapClient("soap.wsdl");
$username="lvye";
$password="777777";
$email="lvye@qq.com";
$result=$client->Register("$username","$password","$email");
if($result) {echo 'register ok';
} else {echo 'register no';
}
server.php<?php
ini_set("soap.wsdl_cache_enabled", "0");
include "Action.php";
$Server=new SoapServer('soap.wsdl',array('soap_version' => SOAP_1_2));   //创建SoapServer对象
$Server->setClass("Action");
$Server->handle();
Action.php<?php
class Action
{private $username;private $password;private $email;public function Register($username,$password,$email) {$this->username=$username;$this->password=$password;$this->email=$email;if ($this->username == 'aaa' and $this->email == 'bbb' and $this->password =='ccc') {echo 'ok';return true;} else {echo 'no';return false;}}
}

soap.wsdl

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://studio.local/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="soap" targetNamespace="http://studio.local/soap/"><wsdl:types><xsd:schema targetNamespace="http://studio.local/soap/"><xsd:element name="Register"><xsd:complexType><xsd:sequence><xsd:element name="in" type="xsd:string"/></xsd:sequence></xsd:complexType></xsd:element><xsd:element name="RegisterResponse"><xsd:complexType><xsd:sequence><xsd:element name="out" type="xsd:string"/></xsd:sequence></xsd:complexType></xsd:element></xsd:schema></wsdl:types><wsdl:message name="RegisterRequest"><wsdl:part name="username" type="xsd:string"></wsdl:part><wsdl:part name="password" type="xsd:string"></wsdl:part><wsdl:part name="email" type="xsd:string"></wsdl:part></wsdl:message><wsdl:message name="RegisterResponse"><wsdl:part name="RegisterResponse" type="xsd:boolean"></wsdl:part></wsdl:message><wsdl:portType name="soap"><wsdl:operation name="Register"><wsdl:input message="tns:RegisterRequest"/><wsdl:output message="tns:RegisterResponse"/></wsdl:operation></wsdl:portType><wsdl:binding name="soapSOAP" type="tns:soap"><soap:binding style="document"transport="http://schemas.xmlsoap.org/soap/http" /><wsdl:operation name="Register"><soap:operation
            soapAction="http://studio.local/soap/Register" /><wsdl:input><soap:body use="literal" /></wsdl:input><wsdl:output><soap:body use="literal" /></wsdl:output></wsdl:operation></wsdl:binding><wsdl:service name="soap"><wsdl:port binding="tns:soapSOAP" name="soapSOAP"><soap:address location="http://studio.local/soap/server.php"/></wsdl:port></wsdl:service>
</wsdl:definitions>

http://www.kushu.net/678.html

http://www.cnblogs.com/helloxyz/archive/2011/11/05/2237328.html%20%20%20RegisterResponce

http://www.cnblogs.com/mbailing/p/3998821.html

http://blog.csdn.net/fdipzone/article/details/21810347

4. 简单的webservices 例子相关推荐

  1. mvc登录实例 mysql_spring mvc + mybatis + mysql 调整的一个简单的登录例子

    spring mvc + mybatis + mysql 整合的一个简单的登录例子 今天用spring跟mybatis整合写了一个简单的登录例子,第一次整合,给自己做个笔记,可能注释写的有点少,做的不 ...

  2. 菜鸟学习Hibernate——简单的一个例子

    一.Hibernate开发. 上篇博客已经为大家介绍了持久层框架的发展流程,持久层框架的种类. 为了能够使用Hibernate快速上手,我们先讲解一个简单的Hibernate应用实例hibernate ...

  3. JavaScript设计模式--简单工厂模式例子---XHR工厂

    JavaScript设计模式--简单工厂模式例子---XHR工厂 第一步,Ajax操作接口(目的是起一个接口检测作用) (1)引入接口文件 //定义一个静态方法来实现接口与实现类的直接检验 //静态方 ...

  4. 基于vue-cli、elementUI的Vue超简单入门小例子

    基于vue-cli.elementUI的Vue超简单入门小例子 这个例子还是比较简单的,独立完成后,能大概知道vue是干嘛的,可以写个todoList的小例子. 开始写例子之前,先对环境的部署做点简单 ...

  5. java servlet例子_Servlet学习教程(三)---- 一个简单的Servlet例子

    我们用个最简单的Servlet例子来解说一下Servlet简单配置以及Servlet类实现类的写法. 第一,我们新建一个Dynamic Web Project,起名Servlet 点击NEXT,设置D ...

  6. smarty课程---最最最简单的smarty例子

    smarty课程---最最最简单的smarty例子 一.总结 一句话总结:其实所有的模板引擎的工作原理是差不多的,无非就是在php程序里面用正则匹配将模板里面的标签替换为php代码从而将两者混合为一个 ...

  7. boost::log模块实现一个简单日志的例子

    boost::log模块实现一个简单日志的例子 实现功能 C++实现代码 实现功能 boost::log模块实现一个简单日志的例子 C++实现代码 #include <boost/log/tri ...

  8. 一个最简单的Makefile例子(转)

    原文地址:http://hi.baidu.com/hellosim/blog/item/42e78341b40c3e8db2b7dce3.html 转载请注明出处 1.hello.c #include ...

  9. 轻松创建nodejs服务器(1):一个简单nodejs服务器例子

    这篇文章主要介绍了一个简单nodejs服务器例子,本文实现了一个简单的hello world例子,并展示如何运行这个服务器,需要的朋友可以参考下 我们先来实现一个简单的例子,hello world. ...

  10. 一个简单的CORBA例子

    因为对CORBA分析的需要,这里写一个简单的CORBA例子.从JDK1.2开始,JDK中集成了ORB的实现,本例子使用了JDK1.7,对于JDK1.2+应该都没有问题.这个例子实现一个简单的加减乘除的 ...

最新文章

  1. 我学到的C#——基础
  2. 电子小帮手电路中的设计原理
  3. 打印机尚未链接到此计算机,win10系统无法连接打印机显示未指定设备的解决方法...
  4. python学习方向-Python方向(转载)
  5. C# random helper class
  6. ./src/cuda.c:36: check_error: Assertion `0‘ failed
  7. java 什么是哨兵_Java中的Redis 哨兵高可用性
  8. pytorch 三维点分类_三维点云分类与分割-PointNet
  9. PXC5.7(Percona XtraDB Cluster)+HAproxy集群部署
  10. bean初始化、注销
  11. Maven之搭建本地私服(nexus)仓库
  12. SSE图像算法优化系列十八:三次卷积插值的进一步SSE优化。
  13. 读书笔记程序员的自我修养 0
  14. (转)《Billions》第二季回归,现实中的SAC也回来了
  15. Android模拟器读取GPS串口模拟器GPS数据
  16. 安卓手机管理_北斗ERP进销存管理(销存管理工具)V2.2.4 安卓手机版
  17. bzoj4167 永远亭的竹笋采摘
  18. 解决:Parameter number 5 is not an OUT parameter
  19. java项目中表格导入找到最近父类生成树形结构
  20. C语言 三个数字比较大小

热门文章

  1. 【转】Java程序员最常用的8个Java日志框架
  2. IIS的状态代码(微软文档)
  3. 我关注的那些程序员大佬
  4. 天善SVIP五折狂欢!今年双十一终于不用剁手了
  5. java中vector和list_java中vector和list的区别
  6. 在win7的操作系统下安装Oracle11R2
  7. Python-求解两个字符串的最长公共子序列
  8. SpringBoot 集成Netty实现UDP Server
  9. Web Clip 图片变淡变浅变灰解决方案
  10. MyBatis 学习之路其一:使用mybatis 创建一个简单的程序