php用soap创建webservice
php提供了一个专门用于soap操作的扩展库,使用该扩展库后
可以直接在php中进行soap操作。下面将介绍soap的基本操作。
一、soap扩展的使用方法
php的soap扩展库通过soap协议实现了客服端与服务器端的
数据交互操作。从php5.0后,php就自带了soap的支持。使用
soap扩展库首先需要修改php安装目录下的配置文件php.ini
来激活soap扩展库。
在php.ini文件中找到如下所示的一行代码,去掉前面的注释(;)。
;extension=php_soap.dll
修改后,重启web服务器即可激活soap扩展。在soap扩展库中,主要
包括三种对象。
1、SoapServer
SoapServer用于创建php服务器端页面时定义可被调用的函数及返回
响应数据。创建一个SoapServer对象的语法格式如下:
$soap = new SoapServer($wsdl,$array);
其中,$wsdl为soap使用得wsdl文件,wsdl是描述Web Service的一种
标准格式,若将$wsdl设置为null,则表示不使用wsdl模式。
生成wsdl文件:
使用SoapDiscovery.class.php来生成wsdl文件。修改其中代码:
//return sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '</definitions>');
$fso = fopen($this->class_name . ".wsdl", "w");
fwrite($fso, sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '</definitions>'));
$array是SoapServer的属性信息,是一个数组。
交互时的数组格式:
array(
array(
'参数名':参数值
)
)
不是二维数组将会报错,未知原因
SoapServer对象的addFunction方法是用来声明哪个函数可以被客户端调用,
语法格式如下:
$soap->addFunction($function_name);
其中,$soap是一个SoapServer对象,$function_name是需要被调用的函数名。
SoapServer对象的handle方法用来处理用户输入并调用相应的函数,最后返回
给客户端处理的结果。语法格式如下:
$soap->handle([$soap_request]);
其中,$soap是一个SoapServer对象,$soap_request是一个可选参数,用来表示
用户的请求信息。如果不指定$soap_request,则表示服务器将接收用户的全部
请求。
2、SoapCliet
SoapClient用于调用远程服务器上的SoapServer页面,并实现了对相应函数的调用
。创建一个SoapClient对象的语法格式如下:
$soap = new SoapClient($wsdl,$array);
其中,参数$wsdl和$array与SoapServer相同。
$wsdl的地址示例:http://www.zox.com/soap?wsdl
创建SoapClient对象后,调用服务端页面中的函数相当于调用了SoapClient的方法,
创建语法如下:
$soap->user_function($params);
其中,$soap是一个SoapClient对象,user_function是服务器端要调用的函数,$params
是要传入函数的参数。
3、SoapFault
SoapFault用于生成soap访问过程中可能出现的错误。创建一个soapFault对象的语法格式
如下:
$fault = new SoapFault($faultcode,$faultstring);
其中,$faultcode是用户定义的错误代码,$faultstring是用户自定义的错误信息。soapFault
对象会在服务器端页面出现错误时自动生成,或者通过用户自行创建SoapFault对象时生成。对于
Soap访问时出现的错误,客户端可通过捕捉SoapFalut对象来获得相应的错误信息。
在客户端捕获SoapFault对象后,可以通过下面的代码获得错误代码和错误信息。
$fault->faultcode;//错误代码
$fault->faultstring;//错误信息
其中,$fault是在前面创建的SoapFault对象。
php用soap创建webservice的更多相关文章
- 【JMeter4.0学习(三)】之SoapUI创建WebService接口模拟服务端以及JMeter对SOAP协议性能测试脚本开发
目录: 创建WebService接口模拟服务端 下载SoapUI 新建MathUtil.wsdl文件 创建一个SOAP项目 接口模拟服务端配置以及启动 JMeter对SOAP协议性能测试脚本开发 [阐 ...
- 利用JDK(1.6及以上版本)创建WebService
一.什么是WebService WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过Internet进行基于Http协议的网络 ...
- 如何使用C#创建WebService
使用C#创建WebService,服务端的webservice是必须,中间的soap,Xml我们不用去关心.下面是使用C#创建WebService的简单介绍. AD:51CTO技术沙龙 | 赋予APP ...
- 【转】SoapUI5.0创建WebService接口模拟服务端
原文:http://blog.csdn.net/a19881029/article/details/26348627 使用SoapUI创建WebService接口模拟服务端需要接口描述文件 MathU ...
- 一个php创建webservice,并通过c#调用的真实实例
最近需要用php创建webservice供C#和JAVA来调用,通过3天的搜索和尝试,终于成功在C#下调用,JAVA的调用还没开始,为防止忘记,在这里记录下来全过程. 本文参考了许多文章,文中也采用了 ...
- THINKPHP3.2 中使用 soap 连接webservice 解决方案
今天使用THINKPHP3.2 框架中开发时使用soap连接webservice 一些浅见现在分享一下, 1.首先我们要在php.ini 中开启一下 php_openssl.dll php_soap. ...
- gsoap创建webservice服务简单教程
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] WebServicesoapgsoap 使用gsoap创建webservice服务 下载gsop 准备待导出的服务接口定义文件比 ...
- python发布及调用基于SOAP的webservice
现如今面向服务(SOA)的架构设计已经成为主流,把公用的服务打包成一个个webservice供各方调用是一种非常常用的做法,而应用最广泛的则是基于SOAP协议和wsdl的webservice.本文讲解 ...
- eclipse使用CXF3.1.*创建webservice服务端客户端以及客户端手机APP(二)
eclipse使用CXF3.1.*创建webservice服务端客户端以及客户端手机APP(二) 接上篇博客,本篇博客主要包含两个内容: 4.使用Android studio创建webservice客 ...
随机推荐
- CoffeeScript及相关文本标记语言
粗步看了下CoffeeScript(简称cs),发现cs这玩意还是有些问题,当然最大的问题之一是缺乏称手的工具.要是能放VS里编译调试当然好.但是转来转去的,真不如直接多敲几个JS字符串. 问题之二就 ...
- 大型网站系统架构实践(四)http层负载均衡之haproxy实践篇(一)
方案 上篇文章讲到了负载均衡的相关理论知识,这篇文章我打算讲讲实践方法以及实践中遇到的问题 方案:haproxy http层负载均衡 安装一个haproxy服务,两个web服务 haproxy:192 ...
- WCF入门(8)
前言 昨天买的usb无线路由到了,笔记本又可以愉快的上网了. 下午去办市民卡,被告知说“本人医保现在停保,要等继续缴才行”,白公交坐了那么远的路. 需要视频的进群,378190436. 第八集 Dif ...
- WebService学习笔记一
01——Schema约束复习 1.1 schema约束 几个重要知识: 1.namespace 相当于schema文件的id 2.targetNamespace属性 用来指定schema文件的name ...
- iOS边练边学--NSURLSession、NSURLSessionTask的介绍与使用以及url中包含了中文的处理方法
一.NSURLSession.NSURLSessionTask的使用步骤 首先创建NSURLSession对象 通过NSURLSession对象创建对应的任务 <1>NSURLSessio ...
- MVC学习Day01
~~~~ =============================================================================================== ...
- web.xml中/与/*的区别
1.拦截"/",可以实现现在很流行的REST风格.很多互联网类型的应用很喜欢这种风格的URL.为了实现REST风格,拦截了所有的请求.同时对*.js,*.jpg等静态文件的访问也就 ...
- 洛谷P1755 斐波那契的拆分
题目背景 无 题目描述 已知任意一个正整数都可以拆分为若干个斐波纳契数,现在,让你求出n的拆分方法 输入输出格式 输入格式: 一个数t,表示有t组数据 接下来t行,每行一个数n(如题) 输出格式: t ...
- java时间库Joda-Time
虽然在java8里面有内置的最新的时间库,但是在java8之前的版本所有的时间操作都得自己写,未免有些繁琐,如果我们不自己封装的话可以用Joda-Time这个时间库,下面写下这个库的具体用法. git ...
- POJ2677 Tour(DP+双调欧几里得旅行商问题)
Tour Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3929 Accepted: 1761 Description ...