目录(?)[-]

  1. 一参考文献
  2. 二概述
  3. 三实例
  4. 注意点
 

一.参考文献

1. http://www.cnblogs.com/xuqifa100/archive/2007/12/13/993926.html 使用.net如何发布web service

2.WebService跨语言的问题

3.Java调用DotNet WebService为什么那么难?

4. java调用.net服务例子

5.使用axis调用.net服务端

二.概述

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

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

三.实例

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

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

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

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Services;
  6. namespace AspWebService1
  7. {
  8. /// <summary>
  9. /// Service1 的摘要说明
  10. /// </summary>
  11. [WebService(Namespace = "http://erplab.sjtu.edu/")]
  12. [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
  13. [System.ComponentModel.ToolboxItem(false)]
  14. // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
  15. // [System.Web.Script.Services.ScriptService]
  16. public class Service1 : System.Web.Services.WebService
  17. {
  18. [WebMethod]
  19. public string HelloWorld()
  20. {
  21. return "Hello World";
  22. }
  23. [WebMethod]
  24. public string sayHelloToPersonNew(String name)
  25. {
  26. if (name == null)
  27. {
  28. name = "nobody";
  29. }
  30. return "hello," + name;
  31. }
  32. [WebMethod]
  33. public double count(double number, double price, double discount)
  34. {
  35. return number * price * discount;
  36. }
  37. [WebMethod]
  38. public float getFloat(float x)
  39. {
  40. return x;
  41. }
  42. //加法
  43. [WebMethod]
  44. public float plus(float x, float y)
  45. {
  46. return x + y;
  47. }
  48. //减法
  49. [WebMethod]
  50. public float minus(float x, float y)
  51. {
  52. return x - y;
  53. }
  54. //乘法
  55. [WebMethod]
  56. public float multiply(float x, float y)
  57. {
  58. return x * y;
  59. }
  60. //除法
  61. [WebMethod]
  62. public float divide(float x, float y)
  63. {
  64. if (y != 0)
  65. {
  66. return x / y;
  67. }
  68. else
  69. return -1;
  70. }
  71. }
  72. }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services; namespace AspWebService1
{
/// <summary>
/// Service1 的摘要说明
/// </summary>
[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程序如下所示:

  1. package edu.sjtu.erplab.aspwebservice;
  2. import javax.xml.namespace.QName;
  3. import javax.xml.rpc.ParameterMode;
  4. import org.apache.axis.client.Call;
  5. import org.apache.axis.client.Service;
  6. import org.apache.axis.encoding.XMLType;
  7. public class AspWebServiceTestClient1 {
  8. public static void main(String[] args) throws Exception {
  9. // 定义方法
  10. String method = "HelloWorld";
  11. String methodPlus = "plus";
  12. String methodMinus = "minus";
  13. String methodMultiply = "multiply";
  14. String methodDivide = "divide";
  15. String methodSayTo = "sayHelloToPersonNew";
  16. // 定义服务
  17. Service service = new Service();
  18. // 测试1:调用HelloWorld方法,方法没有参数
  19. Call call = (Call) service.createCall();
  20. call.setTargetEndpointAddress(new java.net.URL(
  21. "http://localhost:5329/Service1.asmx"));
  22. call.setUseSOAPAction(true);
  23. // 第一种设置返回值类型为String的方法
  24. call.setReturnType(XMLType.SOAP_STRING);
  25. call.setOperationName(new QName("http://erplab.sjtu.edu/", method));
  26. call.setSOAPActionURI("http://erplab.sjtu.edu/HelloWorld");
  27. String retVal1 = (String) call.invoke(new Object[] {});
  28. System.out.println(retVal1);
  29. // 测试2: 调用sayHelloToPersonNew方法,方法有一个参数:name。sayHelloToPersonNew(String name)
  30. Call call2 = (Call) service.createCall();
  31. call2.setTargetEndpointAddress(new java.net.URL(
  32. "http://localhost:5329/Service1.asmx"));
  33. call2.setUseSOAPAction(true);
  34. call2.setReturnType(new QName("http://www.w3.org/2001/XMLSchema",
  35. "string"));
  36. // 第二种设置返回值类型为String的方法
  37. call2.setOperationName(new QName("http://erplab.sjtu.edu/", methodSayTo));
  38. call2.setSOAPActionURI("http://erplab.sjtu.edu/sayHelloToPersonNew");
  39. call2.addParameter(new QName("http://erplab.sjtu.edu/", "name"),// 这里的name对应参数名称
  40. XMLType.XSD_STRING, ParameterMode.IN);
  41. String retVal2 = (String) call2
  42. .invoke(new Object[] { "asp webservice" });
  43. System.out.println(retVal2);
  44. // 测试3: 调用sgetFloat方法,方法有一个参数:x,为float类型
  45. Call call3 = (Call) service.createCall();
  46. call3.setTargetEndpointAddress(new java.net.URL(
  47. "http://localhost:5329/Service1.asmx"));
  48. call3.setUseSOAPAction(true);
  49. call3.setEncodingStyle(null);// 必须有,否为会系统报错。最关键的语句。决定生成xmlns的中soap的命名空间
  50. // 第一种设置返回值类型为Float类型的方法
  51. call3.setReturnType(org.apache.axis.encoding.XMLType.XSD_FLOAT);
  52. call3.setOperationName(new QName("http://erplab.sjtu.edu/", "getFloat"));
  53. call3.setSOAPActionURI("http://erplab.sjtu.edu/getFloat");
  54. call3.addParameter(new QName("http://erplab.sjtu.edu/", "x"),// 这里的x对应参数名称
  55. XMLType.XSD_FLOAT, ParameterMode.INOUT);
  56. Float retVal3 = (Float) call3.invoke(new Object[] { 123 });
  57. System.out.println(retVal3);
  58. // 测试4: 调用plus方法,方法有两个参数:x,y。plus(float x, float y)
  59. Call call4 = (Call) service.createCall();
  60. call4.setTargetEndpointAddress(new java.net.URL(
  61. "http://localhost:5329/Service1.asmx"));
  62. call4.setUseSOAPAction(true);
  63. call4.setEncodingStyle(null);
  64. // 第二种设置返回值类型为Float类型的方法
  65. call4.setReturnType(new QName("http://www.w3.org/2001/XMLSchema",
  66. "float"));
  67. call4.setOperationName(new QName("http://erplab.sjtu.edu/", methodPlus));// 加法
  68. call4.setSOAPActionURI("http://erplab.sjtu.edu/plus");
  69. call4.addParameter(new QName("http://erplab.sjtu.edu/", "x"),// 参数x
  70. org.apache.axis.encoding.XMLType.XSD_FLOAT, ParameterMode.IN);
  71. call4.addParameter(new QName("http://erplab.sjtu.edu/", "y"),// 参数y
  72. XMLType.XSD_FLOAT, ParameterMode.IN);
  73. Float retVal4 = (Float) call4.invoke(new Object[] { 5, 6 });
  74. System.out.println(retVal4);
  75. }
  76. }
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);
}
}

运行结果:

  1. - Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.
  2. Hello World
  3. hello,asp webservice
  4. 123.0
  5. 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)设置返回值类型有两种方式:

一种是

  1. call.setReturnType(XMLType.SOAP_STRING);
call.setReturnType(XMLType.SOAP_STRING);

另外一种是

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

这两种方法是等价的

java调用.net的webservice的更多相关文章

  1. java调用第三方的webservice应用实例

    互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示. 一些常用的webservice网站的链接地址: ...

  2. java调用第三方的webservice应用实例【转载】

    互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示. 一些常用的webservice网站的链接地址: ...

  3. 转 java调用php的webService

    1.首先先下载php的webservice包:NuSOAP,自己到官网去下载,链接就不给出来了,自己去google吧    基于NoSOAP我们写了一个php的webservice的服务端,例子如下: ...

  4. java调用.net的webservice接口

    要调用webservice,首先得有接口,用已经写好的接口地址在myEclipse的目标project中,右键->new web service client-> 选择JAX-WS方式,点 ...

  5. java 调用wsdl的webservice接口 两种调用方式

    关于wsdl接口对于我来说是比较头疼的 基本没搞过.一脸懵 就在网上搜 看着写的都很好到我这就不好使了,非常蓝瘦.谨以此随笔纪念我这半个月踩过的坑... 背景:短短两周除了普通开发外我就接到了两个we ...

  6. Java调用net的webservice故障排除实战分享

    转载地址:http://blog.sina.com.cn/s/blog_4c925dca01014y3r.html 前几天公司要接入国外公司的一个业务功能,对方是提供的net产生的webservice ...

  7. java调用.net的webservice[转]

    一.引用jar包. 完整包路径:http://files.cnblogs.com/files/chenghu/axis完整jar包.rar 二.java程序代码如下所示: package edu.sj ...

  8. java调用sap的webservice(需要登录验证)

    1.Base64.java /* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache ...

  9. wsdl 生成 java 代码 java 使用CXF将wsdl文件生成客户端代码命令java调用第三方的webservice应用实例 推荐使用, 并且设置了 utf8

    推荐使用, 并且设置了 utf8 wsdl2java -p cn.smborderservice  -encoding utf-8 -d f:\logink\src -all -autoNameRes ...

随机推荐

  1. 『cs231n』视频数据处理

    视频信息 和我之前的臆想不同,视频数据不仅仅是一帧一帧的图片本身,还包含个帧之间的联系,也就是还有一个时序的信息维度,包含人的动作判断之类的任务都是要依赖动作的时序信息的 视频数据处理的两种基本方法 ...

  2. UVA-12304 Race(递推)

    题目大意:求n个人比赛的所有可能的名次种数.比如:n=2时,有A第一B第二.B第一A第二.AB并列第一三种名次. 题目解析:既然是比赛,总有第一名.第一名的人数可能是i (1≤i≤n),则剩下待定的人 ...

  3. PHP:第三章——PHP中的可变函数

    PHP中的可变函数 <?php header("Content-Type:text/html;charset=utf-8"); function F(){ echo '999 ...

  4. hadoop mongodb install(3)

    reference:http://dblab.xmu.edu.cn/blog/868-2/ root@iZuf68496ttdogcxs22w6sZ:~# mv mongodb-linux-x86_6 ...

  5. anroid学习目录总结

    当前标签: Android开发学习总结   Android开发学习总结(六)—— APK反编译 孤傲苍狼 2015-07-26 12:48 阅读:4245 评论:5     Android开发学习总结 ...

  6. Python3 urllib抓取指定URL的内容

    最近在研究Python,熟悉了一些基本语法和模块的使用:现在打算研究一下Python爬虫.学习主要是通过别人的博客和自己下载的一下文档进行的,自己也写一下博客作为记录学习自己过程吧.Python代码写 ...

  7. Nexus设备渗透测试平台 – Kali Linux NetHunter

    NetHunter是一个基于Kali Linux为Nexus设备构建的Android渗透测试平台,其中包括一些特殊和独特的功能.NetHunter支持无线802.11注入,一键MANA AP搭建,HI ...

  8. Android开发入门要点记录:四大组件

    cocos2dx跨平台开发中需要了解android开发,昨天快速的浏览了一本Android开发入门教程,因为之前也似懂非懂的写过Activity,Intent,XML文件,还有里面许多控件甚至编程思想 ...

  9. C语言基础:初级指针 分类: iOS学习 c语言基础 2015-06-10 21:50 30人阅读 评论(0) 收藏

    指针:就是地址. &   取地址运算符 %p   打印地址占位符 int a=0; printf("%p ",&a);    指针变量:用来存放地址的变量 定义: ...

  10. Maven学习- 使用Maven构建Web项目

    从网上查了一些资料,才算明白(也就是怎么操作吧),怎么使用Maven构建一个Web项目,找到一篇文档,主要都是从这里学到的: 下载地址:使用Eclipse构建Maven的Web项目.docx 现自己在 ...