准备工作 首先定义一个类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 [...]

WSDL (Web Services Description Language,Web服务描述语言)是一种XML Application,他将Web服务描述定义为一组服务访问点,客户端可以通过这些服务访问点对包含面向文档信息或面向过程调用的服务进行访问(类似远程过程调用)。WSDL首先对访问的操作和访问时使用的请求/响应消息进行抽象描述,然后将其绑定到具体的传输协议和消息格式上以最终定义具体部署的服务访问点。相关的具体部署的服务访问点通过组合就成为抽象的Web服务。 本文将详细讲解WSDL文档的结构,并分析每个元素的作用。 一:WSDL定义     WSDL是一个用于精确描述Web服务的文档,WSDL文档是一个遵循WSDL XML模式的XML文档。WSDL 文档将Web服务定义为服务访问点或端口的集合。在 WSDL 中,由于服务访问点和消息的抽象定义已从具体的服务部署或数据格式绑定中分离出来,因此可以对抽象定义进行再次使用:消息,指对交换数据的抽象描述;而端口类型,指操作的抽象集合。用于特定端口类型的具体协议和数据格式规范构成了可以再次使用的绑定。将Web访问地址与可再次使用的绑定相关联,可以定义一个端口,而端口的集合则定义为服务。    一个WSDL文档通常包含7个重要的元素,即types、import、message、portType、operation、binding、 service元素。这些元素嵌套在definitions元素中,definitions是WSDL文档的根元素。文章的下一部分将会详细介绍WSDL 的基本结构。 二:WSDL的基本结构–概述 如第一部分最后描述的那样,一个基本的WSDL文档包含7个重要的元素。下面将分别介绍这几个元素以及他们的作用。 WSDL 文档在Web服务的定义中使用下列元素: ·                Types – 数据类型定义的容器,它使用某种类型系统(一般地使用XML Schema中的类型系统)。 ·                Message – 通信消息的数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构。 ·                Operation – 对服务中所支持的操作的抽象描述,一般单个Operation描述了一个访问入口的请求/响应消息对。 ·                PortType – 对于某个访问入口点类型所支持的操作的抽象集合,这些操作可以由一个或多个服务访问点来支持。 ·                Binding – 特定端口类型的具体协议和数据格式规范的绑定。 ·                Port – 定义为协议/数据格式绑定与具体Web访问地址组合的单个服务访问点。 ·                Service- 相关服务访问点的集合。 WSDL的xml schema可以参照如下网址:http://schemas.xmlsoap.org/wsdl/ 三:WSDL的基本结构–详述 本节将通过一个例子详细描述WSDL文档每个元素的作用。下面一个例子是一个简单的WSDL文档的内容,该文档的产生可以参见我的另外一篇文章:xfire开发实例–HelloWorld篇 。 [...]

WebService之SOAP

一、SOAP概述       SOAP(Simple Object Access Protocol),它是一种标准消息传递协议,通常是Web Service的事实标准。SOAP是以XML为基础,SOAP消息格式是由XML Schema模式定义,通过XML命名空间使SOAP具有很强的扩展性。       SOAP message:SOAP XML文档实例,通常通过其他某些网络协议的有效载荷来携带SOAP消息,例如:HTTP, SMTP, TCP/IP等。       WebService可以使用两种消息传递方式:One-Way messaging(单向消息传递)或者Request/Response messaging(请求/响应消息传递)  二、SOAP的基本结构        SOAP中根元素是Envelope元素。Envelope元素中可以包含多个可选的Header元素,必须同时包含一个Body元素。Header元素必须是Envelope元素的直接子元素,并且要位于Body元素之前。 三、SOAP的命名空间       SOAP消息可以在Header元素和Body元素中包含若干不同的XML元素,使用唯一的命名空间来标识它们。       xmlns:soap=http://schemas.xmlsoap.org/soap/envelope/命名空间定义了标准SOAP元素(例如:Envelope, Header和Body等)。Header元素的每个头文件都有自己的命名空间。 四、 SOAP头       SOAP header在Web Service中的应用越来越多,例如安全性、事务以及其他各种服务方面的大量“标准”文件头。SOAP文件头是扩展SOAP协议的一个功能非常强大的措施,SOAP文件头的扩展性是SOAP得以流行并且获得其他协议没有取得成功的另一个原因。           4.1 actor属性(next、ultimate receiver)           Actor是由SOAP注释定义的,在SOAP 1.2中,actor属性已经被更名为role。Actor属性和XML命名空间组合在一起使用,以确定要用哪个代码模块处理具体的Header。           Next角色表示消息路径中的下一个节点必须处理文件头。           Ultimate receiver角色表示只有消息的最终接收方才能处理指定的Header。     4.2 mustUnderstand属性           表示处理是否为强制性处理,如果一个节点不能识别某一个强制性Header,那么必定会产生SOAP错误。           如果MustUnderstand属性的值是0,如果应用程序没有能够识别该文件头,那么必须删除此文件头。 五、SOAP体        Body元素要包含应用程序专有的数据或者错误消息。应用程序的专有数据可以是任意XML数据或者是提供给过程调用的任意参数。只有SOAP消息最后的接收方应该处理SOAP Body。 [...]

 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′; 

java调用php的webService

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’,                             [...]

java axis webservice 开发实例

今天突然想研究下WEBSERVICE,从网上找了好多实例,但很多写的让人实在难以恭维,花了三个小时的圈圈转后总算搞通了,其实也挺简单的,总算让我弄明白了,现在贴出我的实例步骤,与大家共同分享。 一: 首先创建个WEB工程,然后: http://ws.Apache.org/axis/网站下载Axis安装包.当然还依赖其他包的,我这里在附件里上传了所有应用到得包,方便大家。 二: 然后就写wsdd 文件(注:其实这里真的不用,可以跳过第二步)为了生成这个文件:server-config.wsdd deploy.wsdd: <deployment xmlns=”http://xml.apache.org/axis/wsdd/” xmlns:java=”” target=”_blank”>http://xml.apache.org/axis/wsdd/providers/java”>   <service name=”HelloWorld” provider=”java:RPC”>     <parameter name=”className” value=”HelloWorld”/>     <parameter name=”allowedMethods” value=”sayHello”/>   </service> </deployment> 在DOS下转换目录到%TOMCAT_HOME%\webapps\axis\WEB-INF,命令: java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd 三: 可以自己写第二步中的文件,代码如下: Wsdd代码 <?xml version=”1.0″ encoding=”UTF-8″?>    <deployment xmlns=”http://xml.apache.org/axis/wsdd/” xmlns:java=”http://xml.apache.org/axis/wsdd/providers/java”>         <globalConfiguration>      <parameter name=”sendMultiRefs” value=”true”/>      <parameter name=”disablePrettyXML” value=”true”/>      <parameter name=”dotNetSoapEncFix” value=”true”/>      <parameter name=”enableNamespacePrefixOptimization” value=”false”/>      <parameter name=”sendXMLDeclaration” value=”true”/>      <parameter name=”sendXsiTypes” value=”true”/>    [...]

1. soap请求方式 2. post请求方式 3. SHOWALLNODE函数(关于节点各属性和数据显示) 一.SOAP请求示例   下面是一个 SOAP 请求示例。所显示的占位符需要由实际值替换。 POST /WebService1/UserSignOn.asmx HTTP/1.1 Host: 192.100.100.81 Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: “http://tempuri.org/LoginByAccount” <?xml version=”1.0″ encoding=”utf-8″?> <soap:Envelope xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:xsd=”http://www.w3.org/2001/XMLSchema” xmlns:soap=”http://schemas.xmlsoap.org/soap/envelope/”> <soap:Body> <LoginByAccount xmlns=”http://tempuri.org/”> <username>string</username> <password>string</password> </LoginByAccount> </soap:Body> </soap:Envelope>   为了与WEBSERVICE交互,需要构造一个与上完全相同的SOAP请求: <% url = “http://192.100.100.81/WebService1/UserSignOn.asmx” SoapRequest=”<?xml version=”&CHR(34)&”1.0″&CHR(34)&” encoding=”&CHR(34)&”utf-8″&CHR(34)&”?>”& _ “<soap:Envelope xmlns:xsi=”&CHR(34)&”http://www.w3.org/2001/XMLSchema-instance”&CHR(34)&” “& _ “xmlns:xsd=”&CHR(34)&”http://www.w3.org/2001/XMLSchema”&CHR(34)&” “& _ “xmlns:soap= “&CHR(34)&”http://schemas.xmlsoap.org/soap/envelope/”&CHR(34)&”>”& [...]

刚才研究了下怎么用ASP调用WebService,其实调用WebService返回数据很简单,但怎么去请求WebService就不太清楚了。 查了一些资料,试着用SOAP来做请求,同时返回结果,第一次没成功,说是 Set soapclient = server.CreateObject(“MSSOAP.SoapClient30″) 这行有错误,这肯定就是组件没注册了。 想在找找还有其他的方法没,但让我把SoapToolkit这个东西给找到了,安装上,测试代码,不报错了!!哈哈!! 下面把DEMO发出来,大家参考下吧 用.NET做了个简单的WebService。代码如下: [WebMethod]     public string Show(string name, string pass)     {         if (name == “aaa” && pass == “123″)             return “成功!”;         else             return “失败!”;     } ASP做了个页面请求并返回结果 <form id=”form1″ name=”form1″ method=”post” action=””>   <input type=”text” name=”name” id=”name” />   <input type=”text” name=”pass” [...]

© 2011 科创网 豫ICP备11029392号 Suffusion theme by Sayontan Sinha