准备工作 首先定义一个类UserInfo: class UserInfo { var $UserName; //… var $Sequence; } 然后写一个测试用的远程方法: function hello() { $a = new UserInfo(); $a->UserName = ”Jaypei”; $a->Sequence = 1928388199; $b = new UserInfo(); $b->UserName = ”cnblogs”; $b->Sequence = 83910021; return array($a, $b); } 一个普通的nuSOAP程序如下:(整个过程是对它的改造) $soap = new soap_server(); // 使用UTF-8 $soap->soap_defencoding = ’UTF-8′; $soap->decode_utf8 = false; // 需设置WSDL命名空间,假设jaypei.cnblogs.com $soap->configureWSDL(‘jaypei.cnblogs.com’, ’urn:jaypei.cnblogs.com’); //… … $soap->register(‘hello’); $soap->service($HTTP_RAW_POST_DATA); 改造过程 首先,注册一个UserInfo的复合类型,方法如下:(这个之前已写过) $soap->wsdl->addComplexType( ‘UserInfo’, ‘complexType’, ‘struct’, ‘all’, ”, array( ‘UserName’=>array(‘name’=>’UserName’, ’type’=>’xsd:string’), ‘Sequence’=>array(‘name’=>’Sequence’, ’type’=>’xsd:int’) )); 这样就可以通过以下方式返回一个单一的UserInfo对象:(hello中返回$a或者返回$b) $soap->register(‘hello’, array(),array(‘return’=>’tns:UserInfo’)); 如果要返回一个列表,则需要改动return处的类型。起初找到了返回string或int等基础类型的列表方法,如下: $soap->register(‘hello’, array(), array(‘return’=>’SOAP-ENC:Array’) ); 当这个方法用到自定义复合类型上时类型处会变成: xsi:type=”SOAP-ENC:Array” SOAP-ENC:arrayType=”object[2]” object并不是我们想要的。于是上网找相关资料发现了如下方法: $soap->register(‘hello’, array(), array(‘return’=>’tns:UserInfoArray’) [...]
一,什么是soap,什么是wsdl,为什么要用他们 SOAP是基于XML和HTTP通信协议,xml各种平台,各种语言都支持的一个种语言。http呢它得到了所有的因特网浏览器及服务器的支持。 WSDL 指网络服务描述语言 (Web Services Description Language),是一种使用 XML 编写的文档。这种文档可描述某个 Web service。它可规定服务的位置,以及此服务提供的操作。 我是做php的,你是java的,他是做.net,如果我们三个之间要进行通信,要进行数据交换,怎么办呢?我们需要一个能和我们都能通信的工具。soap,wsdl被创造出来,使得运行在不同的操作系统并使用不同的技术和编程语言的应用程序可以互相进行通信。 二,实例 如果php要使用soap的话,通常做法是,添加了一下php的soap模块,在php.ini里面加上soap.so,下面介绍一个不要添加soap.so文件,也可以实现soap的方法 nusoap是php写的一个功能文件,包涵进来就可以用了,网上很多自己去搜一下吧。 1,不使用wsdl a,服务端helloworld2.php 查看复制打印? <?php //包函nusoap.php require_once(‘./lib/nusoap.php’); //创建服务端 $server = new soap_server; //定义客户端调用方法 $server->register(‘hello’); //调用方法以及参数 function hello($name) { return ‘Hello, ‘ . $name; } $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ”; $server->service($HTTP_RAW_POST_DATA); ?> <?php//包函nusoap.phprequire_once(‘./lib/nusoap.php’);//创建服务端$server = new [...]
SOAP(Simple Object Access Protocol)简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议。 它包括四个部分:SOAP封装(envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架; SOAP编码规则(encoding rules),用于表示应用程序需要使用的数据类型的实例; SOAP RPC表示(RPC representation),表示远程过程调用和应答的协定; SOAP绑定(binding),使用底层协议交换信息。 基本上就向服务器发送请求实现一个服务器上的函数运行,然后得到返回值。 值 先看一个基本的使用很简单的 这是 soap_server.php 文件 <?php include_once(“lib/nusoap.php”); //插入文件 $server=new soap_server(); //生成对象 $server->configureWSDL(“test_wsdl”, “”); $server->wsdl->schemaTargetNamespace=“urn:test_wsdl”; $server->register(“hello”, //方法名 array( “name”=>“xsd:string”, “age”=>“xsd:string”, “tele”=>“xsd:string”, ),//输入参数 array( “return”=>“xsd:string”, ),//输出参数 “urn:test_wsdl”,//名字空间 “urn:test_wsdl#hello”,//名字空间#要操作的函数名 “rpc”,//style “encoded”,//use “This is test.”//说明 ); //test方法实现 function hello($name,$age,$tele) { if($name==“”){ return new soap_fault(“Client”,“”,“Must supply a valid name.”); [...]
在PHP中使用Web服务,经常用到NuSOAP。 NuSOAP 是 PHP 环境下的 WEB 服务编程工具,用于创建或调用 WEB 服务。它是一个开源软件,完全由PHP语言编写,由一系列 PHP 类组成,不需要扩展库的支持,这种特性使得 NuSOAP 可以用于所有的 PHP 环境,不受服务器安全设置的影响。 许多使用 NuSOAP 调用 .NET Web Service 的朋友可能都遇到过中文乱码问题,本文介绍这一问题的出现的原因和相应的解决方法。 NuSOAP 调用 Web Service 出现乱码的原因: 通常我们进行 Web Service 开发时都是用的 UTF-8 编码,这时我们需要设置 : Code: $client->soap_defencoding = ’utf-8′; 同时,需要让 xml 以同样的编码方式传递: Code: $client->xml_encoding = ’utf-8′; 到现在,应该是一切正常了才对,但是我们在输出结果的时候,却发现,返回的是乱码。 NuSOAP 调用 Web Service 出现乱码的解决方法: 实际上,开启了调试功能的朋友,相信会发现 $client->response 返回的是正确的结果,为什么 $result = $client->call($action, array(‘parameters’ => $param)); 却是乱码呢? 研究过 NuSOAP 代码后我们会发现,当 xml_encoding 设置为 UTF-8 时,NuSOAP 会检测 decode_utf8 的设置,如果为 true ,会执行 PHP 里面的 utf8_decode 函数,而 NuSOAP 默认为 true,因此,我们需要设置: Code: $client->soap_defencoding = ’utf-8′; $client->decode_utf8 = false; $client->xml_encoding = ’utf-8′;
1.首先先下载php的webservice包:NuSOAP,自己到官网去下载,链接就不给出来了,自己去google吧 基于NoSOAP我们写了一个php的webservice的服务端,例子如下: <?php header(“Content-Type:text/html;charset=UTF-8″); require(‘../lib/nusoap.php’); $server = new soap_server(); $server->configureWSDL(‘hellowsdl’, ‘urn:hellowsdl’); $server->wsdl->schemaTargetNamespace = ‘urn:hellowsdl’; $server->register(‘hello’, // method name array(‘name’ => ‘xsd:string’), // input parameters array(‘return’ => ‘xsd:string’), // output parameters ‘urn:hellowsdl’, // namespace ‘urn:hellowsdl#hello’, // soapaction ‘rpc’, // style ‘encoded’, [...]
随着计算机技术的不断发展,现代企业面临的环境越来越复杂,其信息系统大多数为多平台、多系统的复杂系统。这就要求今天的企业解决方案具有广泛的兼 容能力,可以支持不同的系统平台、数据格式和多种连接方式,要求在 Internet 环境下,实现系统是松散耦合的、跨平台的,与语言无关的,与特定接口无关的,而且要提供对Web 应用程序的可靠访问。 随着异种计算环境的不断增加,各种系统间的互操作性就愈显得必要,要求系统能够无缝地进行通信和共享数据,从而在Internet环境下,消除 巨大的信息孤岛,实现信息共享、进行数据交换,达到信息的一致性。Web services 希望实现不同的系统之间能够用“软件-软件对话”的方式相互调用,打破了软件应用、网站和各种设备之间的格格不入的状态,实现“基于WEB无缝集成”的目 标。 什么是SOAP? SOAP(Simple Object Access Protocol )简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议,它包括四个部分:SOAP封装(envelop),封装定义 了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架;SOAP编码规则(encoding rules),用于表示应用程序需要使用的数据类型的实例; SOAP RPC表示(RPC representation),表示远程过程调用和应答的协定; SOAP绑定(binding),使用底层协议交换信息。 虽然这四个部分都作为SOAP的一部分,作为一个整体定义的,但他们在功能上是相交的、彼此独立的。特别的,信封和编码规则是被定义在不同的XML命名空间(namespace)中,这样使得定义更加简单。 SOAP的两个主要设计目标是简单性和可扩展性。这就意味着有一些传统消息系统或分布式对象系统中的某些性质将不是SOAP规范的一部分。比 如:分布式垃圾收集 (Distributed garbage collection)、成批传送消息(Boxcarring or batching of messages)、对象引用 (Objects-by-reference(which requires distributed garbage collection))、对象激活 (Activation(which requires objects-by-reference))。 SOAP消息举例: 1.第一个例子阐明了SOAP中一个简单的通信信息,包括了两个不是SOAP定义而是应用程序定义的元素:头块元素alertcontrol 和体块元素alert。头块元素包括两个参数:priority 和expires。体块元素包括的是实际传送的信息。 (EXAMPLE 1) 2.SOAP通信与底层的不同协议和不同的交换格式有关,下面的例子SOAP使用HTTP作为底层通信协议,从而可以很好的使用 request/response机制来传送信息。 SOAP/HTTP请求包括一个GetLastTradePrice的块元素,该请求携带一个字符串参数和ticker符号,在SOAP应答中返回一个浮 点数。XML名域用来区分SOAP标志符和应用程序特定的标志符。 3. 例3 展示的是StockQuote SOAP服务信息,是对例2的请求作出的一条应答消息。 SOAP与CORBA,COM/DCOM的区别? [...]
Code Zulu Bind Maker is a project I started working on about 3 years ago. Its a stupid little app that configures game settings for Counter-Strike. When I wrote it, version 1.6 was in beta, and everybody played version 1.5 (which was ever so different). Anyway I run a website that supports the app, and [...]
NuSOAP 是 PHP 环境下的 WEB 服务编程工具,用于创建或调用 WEB 服务。它是一个开源软件,当前版本是 0.7.2 ,支持 SOAP1.1 、 WSDL1.1 ,可以与其他支持 SOAP1.1 和 WSDL1.1 的系统互操作。 NuSOAP 完全由PHP语言编写,由一系列 PHP 类组成,不需要扩展库的支持,这种特性使得 NuSOAP 可以用于所有的 PHP 环境,不受服务器安全设置的影响。 1. NuSOAP 的获取和安装 NuSOAP 项目建立在 SourceForge 上,网络地址是: http://sourceforge.net/projects/nusoap/ 或 http://dietrich.ganx4.com/nusoap,这里,可以下载到 NuSOAP 的最新的版本。 NuSOAP 的安装比较简单,把下载的 NuSOAP 的文件拷贝到服务器上,可以放在独立的目录里,也可以与程序代码放在相同的目录里,只要你的 PHP 代码能够访问到这些文件就可以了。 本文的测试环境基于 PHP4.3.2 和 NuSOAP 0.7.2 版本, NuSOAP 安装在 WEB 目录“ /nusoap ”里,有两个子目录, [...]
近期评论