一.参考文献

二.概述

前面写了一篇博客eclipse+webservice 是在java环境下进行的。考虑到webservice的跨系统,跨语言,跨网络的特性,下面写了一个实例来测试其跨语言的的特性。

首先是用asp.net开发一个webservice,然后再java中创建客户端来调用这个service。

三.实例

(1)打开visual studio 2010,新建项目,如下图所示:

新建的项目结果如下图所示:

(2)在Service1.asmx.cs中添加服务方法,代码如下:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Web;

usingSystem.Web.Services;

namespaceAspWebService1

{

///

/// Service1 的摘要说明

///

[WebService(Namespace ="http://erplab.sjtu.edu/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

[System.ComponentModel.ToolboxItem(false)]

// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。

// [System.Web.Script.Services.ScriptService]

publicclassService1 : System.Web.Services.WebService

{

[WebMethod]

publicstringHelloWorld()

{

return"Hello World";

}

[WebMethod]

publicstringsayHelloToPersonNew(String name)

{

if(name ==null)

{

name ="nobody";

}

return"hello,"+ name;

}

[WebMethod]

publicdoublecount(doublenumber,doubleprice,doublediscount)

{

returnnumber * price * discount;

}

[WebMethod]

publicfloatgetFloat(floatx)

{

returnx;

}

//加法

[WebMethod]

publicfloatplus(floatx,floaty)

{

returnx + y;

}

//减法

[WebMethod]

publicfloatminus(floatx,floaty)

{

returnx - y;

}

//乘法

[WebMethod]

publicfloatmultiply(floatx,floaty)

{

returnx * y;

}

//除法

[WebMethod]

publicfloatdivide(floatx,floaty)

{

if(y != 0)

{

returnx / y;

}

else

return-1;

}

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Services;

namespace AspWebService1

{

///

/// Service1 的摘要说明

///

[WebService(Namespace = "http://erplab.sjtu.edu/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

[System.ComponentModel.ToolboxItem(false)]

// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。

// [System.Web.Script.Services.ScriptService]

public class Service1 : System.Web.Services.WebService

{

[WebMethod]

public string HelloWorld()

{

return "Hello World";

}

[WebMethod]

public string sayHelloToPersonNew(String name)

{

if (name == null)

{

name = "nobody";

}

return "hello," + name;

}

[WebMethod]

public double count(double number, double price, double discount)

{

return number * price * discount;

}

[WebMethod]

public float getFloat(float x)

{

return x;

}

//加法

[WebMethod]

public float plus(float x, float y)

{

return x + y;

}

//减法

[WebMethod]

public float minus(float x, float y)

{

return x - y;

}

//乘法

[WebMethod]

public float multiply(float x, float y)

{

return x * y;

}

//除法

[WebMethod]

public float divide(float x, float y)

{

if (y != 0)

{

return x / y;

}

else

return -1;

}

}

}

(3)发布服务,按CTRL+F5运行项目,即可打开服务首页:http://localhost:5329/Service1.asmx,如下图所示:

上图中显示的就是我们在Service1.asmx.cs文件中定义的服务方法。点击“服务说明”可以查看webservice的wsdl文件。

(4)编写java客户端来测试webservice,java程序如下所示:

package edu.sjtu.erplab.aspwebservice;

import javax.xml.namespace.QName;

import javax.xml.rpc.ParameterMode;

import org.apache.axis.client.Call;

import org.apache.axis.client.Service;

import org.apache.axis.encoding.XMLType;

publicclassAspWebServiceTestClient1 {

publicstaticvoidmain(String[] args) throws Exception {

// 定义方法

String method ="HelloWorld";

String methodPlus ="plus";

String methodMinus ="minus";

String methodMultiply ="multiply";

String methodDivide ="divide";

String methodSayTo ="sayHelloToPersonNew";

// 定义服务

Service service =newService();

// 测试1:调用HelloWorld方法,方法没有参数

Call call = (Call) service.createCall();

call.setTargetEndpointAddress(newjava.net.URL(

"http://localhost:5329/Service1.asmx"));

call.setUseSOAPAction(true);

// 第一种设置返回值类型为String的方法

call.setReturnType(XMLType.SOAP_STRING);

call.setOperationName(newQName("http://erplab.sjtu.edu/", method));

call.setSOAPActionURI("http://erplab.sjtu.edu/HelloWorld");

String retVal1 = (String) call.invoke(newObject[] {});

System.out.println(retVal1);

// 测试2: 调用sayHelloToPersonNew方法,方法有一个参数:name。sayHelloToPersonNew(String name)

Call call2 = (Call) service.createCall();

call2.setTargetEndpointAddress(newjava.net.URL(

"http://localhost:5329/Service1.asmx"));

call2.setUseSOAPAction(true);

call2.setReturnType(newQName("http://www.w3.org/2001/XMLSchema",

"string"));

// 第二种设置返回值类型为String的方法

call2.setOperationName(newQName("http://erplab.sjtu.edu/", methodSayTo));

call2.setSOAPActionURI("http://erplab.sjtu.edu/sayHelloToPersonNew");

call2.addParameter(newQName("http://erplab.sjtu.edu/","name"),// 这里的name对应参数名称

XMLType.XSD_STRING, ParameterMode.IN);

String retVal2 = (String) call2

.invoke(newObject[] {"asp webservice"});

System.out.println(retVal2);

// 测试3: 调用sgetFloat方法,方法有一个参数:x,为float类型

Call call3 = (Call) service.createCall();

call3.setTargetEndpointAddress(newjava.net.URL(

"http://localhost:5329/Service1.asmx"));

call3.setUseSOAPAction(true);

call3.setEncodingStyle(null);// 必须有,否为会系统报错。最关键的语句。决定生成xmlns的中soap的命名空间

// 第一种设置返回值类型为Float类型的方法

call3.setReturnType(org.apache.axis.encoding.XMLType.XSD_FLOAT);

call3.setOperationName(newQName("http://erplab.sjtu.edu/","getFloat"));

call3.setSOAPActionURI("http://erplab.sjtu.edu/getFloat");

call3.addParameter(newQName("http://erplab.sjtu.edu/","x"),// 这里的x对应参数名称

XMLType.XSD_FLOAT, ParameterMode.INOUT);

Float retVal3 = (Float) call3.invoke(newObject[] { 123 });

System.out.println(retVal3);

// 测试4: 调用plus方法,方法有两个参数:x,y。plus(float x, float y)

Call call4 = (Call) service.createCall();

call4.setTargetEndpointAddress(newjava.net.URL(

"http://localhost:5329/Service1.asmx"));

call4.setUseSOAPAction(true);

call4.setEncodingStyle(null);

// 第二种设置返回值类型为Float类型的方法

call4.setReturnType(newQName("http://www.w3.org/2001/XMLSchema",

"float"));

call4.setOperationName(newQName("http://erplab.sjtu.edu/", methodPlus));// 加法

call4.setSOAPActionURI("http://erplab.sjtu.edu/plus");

call4.addParameter(newQName("http://erplab.sjtu.edu/","x"),// 参数x

org.apache.axis.encoding.XMLType.XSD_FLOAT, ParameterMode.IN);

call4.addParameter(newQName("http://erplab.sjtu.edu/","y"),// 参数y

XMLType.XSD_FLOAT, ParameterMode.IN);

Float retVal4 = (Float) call4.invoke(newObject[] { 5, 6 });

System.out.println(retVal4);

}

}

package edu.sjtu.erplab.aspwebservice;

import javax.xml.namespace.QName;

import javax.xml.rpc.ParameterMode;

import org.apache.axis.client.Call;

import org.apache.axis.client.Service;

import org.apache.axis.encoding.XMLType;

public class AspWebServiceTestClient1 {

public static void main(String[] args) throws Exception {

// 定义方法

String method = "HelloWorld";

String methodPlus = "plus";

String methodMinus = "minus";

String methodMultiply = "multiply";

String methodDivide = "divide";

String methodSayTo = "sayHelloToPersonNew";

// 定义服务

Service service = new Service();

// 测试1:调用HelloWorld方法,方法没有参数

Call call = (Call) service.createCall();

call.setTargetEndpointAddress(new java.net.URL(

"http://localhost:5329/Service1.asmx"));

call.setUseSOAPAction(true);

// 第一种设置返回值类型为String的方法

call.setReturnType(XMLType.SOAP_STRING);

call.setOperationName(new QName("http://erplab.sjtu.edu/", method));

call.setSOAPActionURI("http://erplab.sjtu.edu/HelloWorld");

String retVal1 = (String) call.invoke(new Object[] {});

System.out.println(retVal1);

// 测试2: 调用sayHelloToPersonNew方法,方法有一个参数:name。sayHelloToPersonNew(String name)

Call call2 = (Call) service.createCall();

call2.setTargetEndpointAddress(new java.net.URL(

"http://localhost:5329/Service1.asmx"));

call2.setUseSOAPAction(true);

call2.setReturnType(new QName("http://www.w3.org/2001/XMLSchema",

"string"));

// 第二种设置返回值类型为String的方法

call2.setOperationName(new QName("http://erplab.sjtu.edu/", methodSayTo));

call2.setSOAPActionURI("http://erplab.sjtu.edu/sayHelloToPersonNew");

call2.addParameter(new QName("http://erplab.sjtu.edu/", "name"),// 这里的name对应参数名称

XMLType.XSD_STRING, ParameterMode.IN);

String retVal2 = (String) call2

.invoke(new Object[] { "asp webservice" });

System.out.println(retVal2);

// 测试3: 调用sgetFloat方法,方法有一个参数:x,为float类型

Call call3 = (Call) service.createCall();

call3.setTargetEndpointAddress(new java.net.URL(

"http://localhost:5329/Service1.asmx"));

call3.setUseSOAPAction(true);

call3.setEncodingStyle(null);// 必须有,否为会系统报错。最关键的语句。决定生成xmlns的中soap的命名空间

// 第一种设置返回值类型为Float类型的方法

call3.setReturnType(org.apache.axis.encoding.XMLType.XSD_FLOAT);

call3.setOperationName(new QName("http://erplab.sjtu.edu/", "getFloat"));

call3.setSOAPActionURI("http://erplab.sjtu.edu/getFloat");

call3.addParameter(new QName("http://erplab.sjtu.edu/", "x"),// 这里的x对应参数名称

XMLType.XSD_FLOAT, ParameterMode.INOUT);

Float retVal3 = (Float) call3.invoke(new Object[] { 123 });

System.out.println(retVal3);

// 测试4: 调用plus方法,方法有两个参数:x,y。plus(float x, float y)

Call call4 = (Call) service.createCall();

call4.setTargetEndpointAddress(new java.net.URL(

"http://localhost:5329/Service1.asmx"));

call4.setUseSOAPAction(true);

call4.setEncodingStyle(null);

// 第二种设置返回值类型为Float类型的方法

call4.setReturnType(new QName("http://www.w3.org/2001/XMLSchema",

"float"));

call4.setOperationName(new QName("http://erplab.sjtu.edu/", methodPlus));// 加法

call4.setSOAPActionURI("http://erplab.sjtu.edu/plus");

call4.addParameter(new QName("http://erplab.sjtu.edu/", "x"),// 参数x

org.apache.axis.encoding.XMLType.XSD_FLOAT, ParameterMode.IN);

call4.addParameter(new QName("http://erplab.sjtu.edu/", "y"),// 参数y

XMLType.XSD_FLOAT, ParameterMode.IN);

Float retVal4 = (Float) call4.invoke(new Object[] { 5, 6 });

System.out.println(retVal4);

}

}

运行结果:

- Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment supportisdisabled.

Hello World

hello,asp webservice

123.0

11.0

- Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.

Hello World

hello,asp webservice

123.0

11.0

注意点:

(a)我们发现如果参数是String类型的,那么可以不需要设置call的参数 call3.setEncodingStyle(null);但是如果传入参数为float类型,那么就必须加上这一条语句。

(b)设置返回值类型有两种方式:

一种是

call.setReturnType(XMLType.SOAP_STRING);

call.setReturnType(XMLType.SOAP_STRING);

另外一种是

call2.setReturnType(newQName("http://www.w3.org/2001/XMLSchema","string"));

call2.setReturnType(new QName("http://www.w3.org/2001/XMLSchema","string"));

这两种方法是等价的

java调用net webservice_java调用.net的webservice相关推荐

  1. java 读取webservice_java 调用webService的各种方法

    一.利用jdk web服务api实现,这里使用基于 SOAP message 的 Web 服务 1.首先建立一个Web services EndPoint: package Hello; import ...

  2. asp.net通过webservice调用java接口全过程_100-RPC、RMI、WebService、httpClient、跨域、集群部署...

    1. RPC技术介绍_单体架构_SOA架构 (1) 什么是单体架构 一个归档包(例如 war 格式或者 Jar 格式)包含了应用所有功能的应用程序,我们通常称之为单体应用.也称之为单体应用架构,这是一 ...

  3. java axis2 开发webservice_利用Axis2开发WebService(3)—用Java实现调用WebService的客户端程序 | 学步园...

    WebService是为程序服务的,只在浏览器中访问WebService是没有意义的.因此,在本节使用Java实现了一个控制台程序来调用上一节发布的WebService.调用WebService的客户 ...

  4. c 调用java post方法_C#调用Java方法(详细实例)

    C#可以直接引用C++的DLL和转换JAVA写好的程序.最近由于工作原因接触这方面比较多,根据实际需求,我们通过一个具体例子把一个JAVA方法转换成可以由C#直接调用的DLL C#调用c++ C#调用 ...

  5. 在php中调用java接口吗,php 调用 java 接口

    php 需要开启 curl模块 /* * HTTP 请求函数封装 */ function http_request_cloudzone($url, $data){ //var_dump($url.&q ...

  6. webservice第一篇【介绍、Scoket、http调用、wsimport调用】

    WebService介绍 首先我们来谈一下为什么需要学习webService这样的一个技术吧-. 问题一 如果我们的网站需要提供一个天气预报这样一个需求的话,那我们该怎么做????? 天气预报这么一个 ...

  7. axis1 c# 接口 调用_java axis 调用C# webService的例子

    首次接触到WebService,要调用一个发送短信的WebService里方法sendMQ,不废话,自己留个备份,也给需要的朋友,代码如下: Service service = new Service ...

  8. java cxf 客户端调用_CXF客户端调用N种方式

    方式一: 配置CXF环境变量,用wsdl2java工具自动产生代码.项目结构目录如下: 其中com.yq.webservice下面的所有的java类都是wsdl2java工具自动产生的. JaxWsP ...

  9. java字典写实例,基于JAVA的新华字典接口调用代码实例

    基于JAVA的新华字典接口调用代码实例 接口描述:基于JA V A的新华字典接口调用代码实例 接口平台:聚合数据 import java.io.BufferedReader; import java. ...

最新文章

  1. 预测|十张图带你了解2018年机器人行业趋势与前景
  2. c# 连续抓取页面内容
  3. VTK:彩色注释立方体用法实战
  4. log4j.properties log4j.xml 路径问题
  5. 《SolidWorks 2013中文版机械设计从入门到精通》一2.6 几何关系
  6. win10配置SSH连接Github
  7. 吴恩达机器学习(四)逻辑回归(二分类与多分类)
  8. 电脑录屏软件哪个好?高清流畅的录屏方法在这里!
  9. No serializer found for class
  10. 微信开门,给你简单极致的开门体验!
  11. 心理学入门必读好物,《亲密关系》精华版
  12. AHRS和INS的区别
  13. 腾讯网页登陆的加密机制
  14. 分享几款让你工作事半功倍的软件
  15. 用Python 制作身高预测系统
  16. LabVIEW通讯-TCP
  17. 2014 显卡天梯图
  18. 超硬核Java学习路线图+学习资源+实战项目汇总,看完以后不用再问我怎么学Java了!
  19. basler工业相机使用问题总结
  20. 解析MYSQL BINLOG二进制格式(10)--问题解答

热门文章

  1. i5四核八线程怎么样_同样四核八线程,Ryzen 3 3100和3300X区别大了!
  2. 下个软件包可能泄露信用卡信息,Python 包存储库 PyPI 又爆恶意代码,下载达 3 万次,你中招了吗?...
  3. Pandas 表格样式设置指南,看这一篇就够了!
  4. centos标准分区调整大小_去繁化简解决CentOS下调整home和根分区大小的方法
  5. python表单填写_Python3.4 splinter(模拟填写表单)使用方法
  6. 第68节:Java中的MYSQL运用从小白到大牛
  7. 入坑-DM导论-第一章绪论笔记
  8. 高德地图-轨迹回放(二)
  9. Filter高级开发
  10. topcpder SRM 664 div2 A,B,C BearCheats , BearPlays equalPiles , BearSorts (映射)