webservice 现在是开始流行了,很多业务开启了这个功能。去年接触的一个金融类的项目有类似功能调用。当时没放心思研究,最两天试着接触了下,还真不错的。起步其实挺简单。

服务端的代码

server.php

<?php
class PassPort { /**
* 打招呼
* @param string $name
*/
public function hello($name) {
return 'Hello '. $name. ' !<br />';
} /**
* 求和
* @param int $a
* @param int $b
* @return int
*/
public function add($a, $b) {
return $a + $b;
} /**
* 再见了
*/
public function say() {
return 'GoodBye!<br />';
}
}

首先需要有个 wsdl 文件。两种方法生成,一个是借助 SoapDiscovery.class.php 类生成,这个需要从网上找下。

include 'server.php';//服务类的定义文件
include 'SoapDiscovery.class.php'; //第一个参数为类的名字,这里是 Api 也是生成的wsdl的文件的名字,第二个参数是服务的名字可以自己自由定义
$wsdl = new SoapDiscovery('Api', 'service');
$wsdl->getWSDL();

还有一种方法是通过 ZendStudio 生成,这个其实也很简单。可能有人找不到添加 wsdl ,那就说明你没有安装这个插件。点Help=》Welcome 然后选中 WSDL,会重启一次。

新建的时候 tagert namespace 填写自己项目的访问地址 就可以基本不用改。生成之后需要改些东西。

TestSoapSoap下面填写php webService 如soapservice.php
NewOperation:添加方法。WebService里需要提供给别人调用的方法名
input :设置输入参数名和类型
output:设置返回值。
Add part:如果在input里添加,就是添加多个参数
set Type / set Element: 设置参数的input/output类型Type包含常见的数据类型(int,string,boolean,float,time…),Element就是自定义元素类型。

注意一点,右侧的那些方法都是自己手动 通过 New Operation 来添加的,还有里面的参数。关于参数和返回有点需要注意的,可以没有参数,但是需要有返回,没有返回客户端不知道处理结果啊,我是这么想的,必须要有返回。

这个时候看这好像完成了,其实没有,因为只有第一个方法(默认会有一个)是存在的,其他的都没有。需要点下中间的那个类似复选框的东西,然后在下面的界面点 Generate Binding Content 然后才可以正常用,否则会出现类似下面的提示错误。

xxx is not a valid method for this service

接下来就是写客户端的调用了 client.php。

<?php
ini_set('soap.wsdl_cache_enabled', 0);
ini_set('display_errors', 1);
error_reporting(E_ALL);//错误显示级别 $client = new SoapClient('soap.wsdl');
echo $client->hello('wayne');
echo 'The result is:', $client->add(7, 8), '<br />';
echo $client->say();
unset($client);

这里要提下,出现 xxx is not a valid method for this service 这样的提示,还有个可能就是你的服务端的方法改了,但是soap存在缓存,默认是打开的。linux环境下是 /tmp 目录下,调试过程中可以设置关闭缓存。使用语句  ini_set('soap.wsdl_cache_enabled', 0);来关闭。

最后通过浏览器访问 client.php 就可以看到想要的结果了。

Hello wayne !
The result is:15
GoodBye!

好了,到这里,初步接触就结束了。其实实例化SoapServer SoapClient 对象的时候,还有好多参数,我现在的是 server.php 和 client.php 都在通一个目录下。不存在url,之类的路径问题。接下来就要关注这个了。

PHP webservice 的初接触的更多相关文章

  1. 初接触BurpLoader工具

    初接触burp工具 菜鸟一枚,现在在接触一段时间测试,我在测试功能性的时候,想着网站被黑案例那么多,我是不是也应该弄弄安全性测试了,所以就有了下边的第一次接触BurpLoader工具来测试手机的app ...

  2. 软工实践练习-Git初接触

    第一次听到Git,有点不知所云,听了实践课老师的讲解,才明白了Git作为最先进的分布式版本控制系统的重要性. 至于Git的安装和使用仍旧是自己摸索着去完成了,当然在这过程中也是遇到了很多的问题. 接下 ...

  3. vi初接触

    vi初接触 它有三种模式: 一 一般模式 二 编辑模式 三 命令行模式 介绍几种比较常用的吧 -- 退出:q 写入:w 强制:! (以上可叠加) 显示行号:set nu 取消:set nonu 跳转到 ...

  4. ExtJS初接触 —— 了解 Ext Core

    ExtJS初接触 —— 了解 Ext Core Ext Core是一款和jQuery媲美的轻型JS库,基于MIT许可.对于Dom的操作,我个人还是比较喜欢用jQuery.当然如果项目中用的是ExtJS ...

  5. ExtJS初接触 - 在项目中使用ExtJS

    ExtJS初接触 - 在项目中使用ExtJS 今天ExtJS官网发布了ExtJS最新正式版4.2.1.Ext JS 4.2.1 正式版 下载 ExtJS为开发者在开发富客户的B/S应用中提供丰富的UI ...

  6. Java之路——Java初接触

    本文大纲 1.Java是什么 2.Java历史 3.Java技术范围 3.1 Java SE平台技术范围 3.2 Java EE技术范围 3.3 Java 体系技术范围 4.总结 1.Java是什么 ...

  7. python 之 数据类型初接触

    python 之 数据类型初接触 标准数据类型 Python3 中有六个标准的数据类型: Number(数字) String(字符串) List(列表) Tuple(元组) Set(集合) Dicti ...

  8. Dapr微服务应用开发系列2:Hello World与SDK初接触

    题记:上篇介绍了Dapr的环境配置,这次我们来动手尝试一下Dapr应用的开发 Hello World Dapr应用的Hello World其实和其他的Hello World一样简单: 首先用你喜欢的语 ...

  9. Webservice初接触

    公司用到了Powerbuilder+Webserice的技术,能将数据窗口中对数据库的请求,以SQL语句的形式,发到Webservice中,然后由Webservice完成对数据库的请求,并将结果返回给 ...

随机推荐

  1. cocos2d-x中CCEditbox导出到lua

    自从工作后感觉时间较少(每天工作9-22,晚上就不想动了,早上想多睡点),工作中用的是 cocos2d-x.cocos2d-x是一款手机游戏引擎,虽然支持lua,但和love2d相比非纯lua游戏引 ...

  2. (译).NET4.X并行任务Task需要释放吗?

    摘要:本博文解释在.NET 4.X中的Task使用完后为什么不应该调用Dispose().并且说明.NET4.5对.NET4.0的Task对象进行的部分改进:减轻Task对WaitHandle对象的依 ...

  3. man page用法

    通过man man可查看man page的具体用法. 1   Executable programs or shell commands       2   System calls (functio ...

  4. Github优秀开源项目

    王潜升 https://github.com/code4craft/webmagic 一个爬虫框架,除了不会反爬虫外(当然可以自己加)其他都很牛逼.这个项目更新还是很快的.   ansi分词  htt ...

  5. 用Zend OPCache提高PHP的性能

    Zend OPCache的前身是Zend Optimizer + (Zend O+),在PHP5.5的发行版本中自带了Zend O+,并重新命名为:Zend OPCache.但是默认是没有启用的,可以 ...

  6. Httpclient远程调用WebService示例(Eclipse+httpclient)

    package cn.com.taiji.pos.httpserver; import java.io.BufferedInputStream;import java.io.ByteArrayOutp ...

  7. 原生YII2 增删改查的一些操作(非ActiveRecord)

    1.添加数据 如下,使用insert方法:t_admin_user为数据表名..其他的是属性.. $num = Yii::$app->db->createCommand()->ins ...

  8. jconsole监控tomcat

    一.专业术语 GC垃圾回收机制:当需要分配的内存空间不再使用的时候,JVM将调用垃圾回收机制来回收内存空间. JMX(Java Management Extensions,即Java管理扩展)是一个为 ...

  9. ChemDraw使用不了怎么办

    ChemDraw作为一款专业级的化学绘图软件,不仅可以帮助用户绘制图像在数据计算方面也起了很大作用,因此,ChemDraw非常受用户的欢迎.但是我们在使用过程中难免会遇到各种问题,特别是对于新手用户, ...

  10. C++之运行时类型识别RTTI

     C++ Code  12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 ...