.net/java调用NuSOAP构建的Web服务

此文主要解决php下的web服务接受和返回复杂类型(自定义类型)该如何构建以及其他程序客户端如何来调用。

第一步:用NuSOAP组件来构建基于php的webservice

下载NuSOAP组件,在创建基于php的webservice时需要引用,代码如下,很简单直观,有注释就不多解释了:

<?php

require_once (‘lib/nusoap.php‘);

// 返回的是一个数组

function adduser ($userName, $userAge, $birthday, $higher) {

$temp [‘userName‘] = $userName;

$temp [‘userAge‘] = $userAge;

$temp [‘birthday‘] = $birthday;

$temp [‘higher‘] = $higher;

return $temp;

}

function validate($userName)

{

if ($userName == "helloworld") {

return  1;

}

else

{

return  0;

}

}

$soap = new soap_server ();

// 避免乱码

$soap->soap_defencoding = ‘UTF-8‘;

$soap->decode_utf8 = false;

$soap->xml_encoding = ‘UTF-8‘;

$soap->configureWSDL ( ‘Demowsdl‘, ‘urn:Demowsdl‘ );

$soap->wsdl->schemaTargetNamespace = ‘urn:Demowsdl‘;

// 下面是设置一个返回的数组类型

// 参数一,为你自己命名的数据类型

// 参数二,混合类型,不用管

// 参数三,为结构体,或者数组(array)

// 参数四,按照什么排序,有三个选择all(全部)|sequence(次序)|choice(选择)

// 参数五,基本约束

// 注意:上面5个我们不用改变

// 参数6,最重要的参数,也就是我们返回的类型想对应

// 返回数组下标 =>array(‘name‘=>"数组下标",‘type‘=>"xsd:对应的类型")

// 类型基本包括 string,int, date,boolean 这几种形式

$soap->wsdl->addComplexType ( ‘userInfo‘, ‘complexType‘, ‘struct‘, ‘all‘, ‘‘, array (

‘userName‘ => array (

‘name‘ => ‘userName‘,

‘type‘ => ‘xsd:string‘

),

‘userAge‘ => array (

‘name‘ => ‘userAge‘,

‘type‘ => ‘xsd:int‘

)

,

‘birthday‘ => array (

‘name‘ => ‘birthday‘,

‘type‘ => ‘xsd:date‘

)

,

‘higher‘ => array (

‘name‘ => ‘higher‘,

‘type‘ => ‘xsd:boolean‘

)

) );

// 这里是注册函数

// 参数一,函数名

// 参数二,是这个函数接受的参数,注意指定类型

// 参数三,为返回的值,不一定名字非叫return,叫其他的也可以,注意返回的类型,

// 我这里是返回我自己定义的类型 tns:userInfo 如果为基本的类型为 xsd:string 这个样子

// 其他的参数,只要统一就可以了,尤其是名字空间跟 soapaction

$soap->register (‘adduser‘,

array (

‘userName‘ => ‘xsd:string‘,

‘userAge‘ => ‘xsd:int‘,

‘birthday‘ => ‘xsd:date‘,

‘higher‘ => ‘xsd:boolean‘

),

array (

‘return‘ => ‘tns:userInfo‘

),

‘urn:Demowsdl‘,

‘urn:Demowsdl#adduser‘,

‘rpc‘,

‘encoded‘,

‘添加用户‘ );

$soap->register ( ‘validate‘,

array (

‘userName‘ => ‘xsd:string‘

),

array (

‘return‘ => ‘xsd:int‘

),

‘urn:Demowsdl‘,

‘urn:Demowsdl#validate‘,

‘rpc‘,

‘encoded‘,

‘验证用户名‘ );

$soap->service ( $HTTP_RAW_POST_DATA );

?>

我测试环境在本机,对应的web在目录phpweb1下,所以:

对外提供的服务地址即是:http://localhost/phpweb1/mynusoapserver.php

对外提供的wsdl地址即是:http://localhost/phpweb1/mynusoapserver.php?wsdl

以上两个地址在浏览器中能正常访问和显示wsdl描述文件,即为成功!

第二步:.net调用NuSOAP构建的web服务

.net下调用就相当简单了,直接在Visual Studio下引用上述给出的服务地址,取一个命名空间名字,这里取为phpservice,客户端代码如下:

using phpservice;

Demowsdl ws = new Demowsdl();

userInfo info = ws.adduser("张三123", 18, DateTime.Now, false);

int result = ws.validate("helloworld");

第三步:java调用NuSOAP构建的web服务

java调用有好几种方式,比如使用apache的axis组件、使用apache的soap组件、或者直接使用wsdl2java把WSDL文件转成本地类,然后像本地类一样使用,这里我就使用第三种方式演示一下,为了使用wsdl2java命令,我们得先配置一下,去下载Axis2包,然后输入如下命令:

G:\phppackage\axis2-1.6.2\bin>wsdl2java -o c:\  -uri http://localhost/phpweb1/mynusoapserver.php?wsdl

命令执行完毕后,在指定c:\下的目录src\demowsdl中生成了本地客户端代理类,文件分别为:

DemowsdlCallbackHandler.java、DemowsdlStub.java 拷贝到java工程的源文件下(src目录)(带上目录demowsdl),最终的客户端代码为:

package demowsdl;

import java.util.Date;

import demowsdl.DemowsdlStub.AdduserResponse;

import demowsdl.DemowsdlStub.ValidateResponse;

public class TestPhpService {

public static void main(String[] args) {

try {

// 获得Stub实例

DemowsdlStub s = new DemowsdlStub();

// 调用第一个方法

DemowsdlStub.Adduser input_info = new DemowsdlStub.Adduser();

input_info.setUserName("张三123");

input_info.setUserAge(18);

input_info.setBirthday(new Date());

input_info.setHigher(false);

// 得到返回值

AdduserResponse res = s.adduser(input_info);

DemowsdlStub.UserInfo output_info = res.get_return();

// 调用第二个方法

DemowsdlStub.Validate input_info2 = new DemowsdlStub.Validate();

input_info2.setUserName("helloworld");

// 得到返回值

ValidateResponse res2 = s.validate(input_info2);

int output_info2 = res2.get_return();

} catch (Exception e) {

e.printStackTrace();

}

}

}

以上服务端程序和客户端程序均测试通过,完毕!

.net/java调用NuSOAP构建的Web服务

时间: 2024-12-30 06:51:23

.net/java调用NuSOAP构建的Web服务的相关文章

使用 Jersey 和 Apache Tomcat 构建 RESTful Web 服务

RESTful Web 服务简单介绍 REST 在 2000 年由 Roy Fielding 在博士论文中提出,他是 HTTP 规范 1.0 和 1.1 版的首席作者之中的一个. REST 中最重要的概念是资源(resources),使用全球 ID(通常使用 URI)标识. client应用程序使用 HTTP 方法(GET/ POST/ PUT/ DELETE)操作资源或资源集.RESTful Web 服务是使用 HTTP 和 REST 原理实现的 Web 服务.通常,RESTful Web 服

使用RpcLite构建SOA/Web服务

使用RpcLite构建SOA/Web服务 SOA框架系列 1. 使用RpcLite构建SOA/Web服务 提到Web服务最先想到的就是WebService此外常用的还有WCF.ServiceStack.WebApi等. RpcLite是一个开源的轻量级SOA服务框架,除了基本的提供Web服务还包括SOA治理系统(本文暂不展开在后继的文章会详细说明).RpcLite与WCF比较像,下面介绍使用方法. 1.   创建一个Web项目,Framework选择>=4.0 2.   从NuGet中添加Rpc

基于jersey和Apache Tomcat构建Restful Web服务(一)

基于jersey和Apache Tomcat构建Restful Web服务(一) 现如今,RESTful架构已然成为了最流行的一种互联网软件架构,它结构清晰.符合标准.易于理解.扩展方便,所以得到越来越多网站的采用.那么问题来了,它是什么呢? 起源 REST(Representational state transfer)在 2000 年由 Roy Fielding 在博士论文中提出,他是 HTTP 规范 1.0 和 1.1 版的首席作者之一. REST 中最重要的概念是资源(resources

基于jersey和Apache Tomcat构建Restful Web服务(二)

基于jersey和Apache Tomcat构建Restful Web服务(二) 上篇博客介绍了REST以及Jersey并使用其搭建了一个简单的“Hello World”,那么本次呢,再来点有趣的东西,当然也是很简单了,仅仅是在路径中包含参数而已了.接下来开始动手实践吧. 在路径中包含参数 接下来就在上次的基础上进行改动即可,或者是再添加一个方法,随意了,这个方法主要就是在路径中加入输入的参数,并且根据参数的不同,它的返回值也不同,返回值为“Hello”+你输入的参数.这里用到了“PathPar

SpringBoot实战(十)之使用Spring Boot Actuator构建RESTful Web服务

一.导入依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.

Yii2快速构建RESTful Web服务功能简介

Yii2相比Yii1而言,一个重大的改进是内置了功能完备的RESTful支持. 其内置RESTful支持提供了如下功能: 使用ActiveRecord的通用接口来快速构建原型: 应答格式协商(缺省支持 JSON 和 XML): 可定制的对象序列化,支持选择输出哪些列: 请求数据的格式化以及验证错误: 通过HTTP 动词映射实现高效路由: 支持 OPTIONS 和 HEAD 动词: 认证 和 鉴权: 支持 HATEOAS(RESTful的架构约束,超媒体即应用程序状态): 结果缓存,可使用 yii

使用RpcLite构建SOA/Web服务(Full .Net Framework)

使用RpcLite构建SOA/Web服务(Full .Net Framework) SOA框架系列 1. 使用RpcLite构建SOA/Web服务 2. 使用RpcLite构建SOA/Web服务(Full .Net Framework) 继前一篇文章<使用RpcLite构建SOA/Web服务>已过去好几个月.在这几个月里对RpcLite作了很多修改如:.Net Core的支持.Fluent API方式配置.Monitor.Filter等功能. 前一篇文章介绍了使用RpcLite的基本用法,在文

基于IIS构建Pyathon Web服务

本文简单叙述了在Windows下,如何利用IIS构建Python Web服务. 其主要步骤如下: 1.在IIS下构建一个站点,如图: 2.配置Python文件的处理程序,如图: 3.最后,在对应站点根目录下放置Python文件,如图: 是不是感觉好简单.我们在浏览器看看结果,如图:

通过Jersey客户端API调用REST风格的Web服务

Jersey 客户端 API 基础 要开始使用 Jersey 客户端 API,你首先需要创建一个 com.sun.jersey .api.client.Client 类的实例.下面是最简单的方法: import com.sun.jersey .api.client.Client;Client client = Client.create();Client 类是创建一个 RESTful Web Service 客户端的主要配置点.你可以使用它来配置不同的客户端属性和功能,并且指出使用哪个资源提供者