- 浏览: 496006 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (301)
- Swing技术 (1)
- Linux (1)
- Javascript (22)
- 数据结构和算法 (3)
- J2SE (36)
- workflow (5)
- 设计模式 (14)
- web service (19)
- Ajax (14)
- 中间件 & 服务器 (8)
- 多线程 (9)
- Oracle (52)
- sys & soft (10)
- JMS (3)
- sso (9)
- android (11)
- struts2 (10)
- web协议 (2)
- 分布式 (2)
- PM (2)
- OLAP (3)
- Redis (2)
- Hibernate (7)
- ibatis (2)
- SQLServer (1)
- maven (3)
- Spring (7)
- Jsp (2)
- slf4j (1)
- jQuery (15)
- 权限 (1)
- 系统集成 (1)
- 笔记 (1)
- Freemarker (2)
- 项目管理 (1)
- eclipse (3)
- GIS (1)
- NoSql (3)
- win10 (1)
- win10网络 (2)
- 底层 (3)
- 数据库 (0)
最新评论
-
kabuto_v:
请问那种图,uml图是怎么画出来的呢?是您自己手工画的,还是有 ...
FastJSON 序列化、反序列化实现 -
梦行Monxin商城系统:
电商实例、业务并发、网站并发及解决方法 -
rockethj8:
client 㓟有一个参数是可以忽略一些URL 不进行验证登录 ...
SSO 之 (单点登录)实施中遇到的几个问题 -
mengxiangfeiyan:
好啊。。。。。
Oracle删除表,删除数据以及恢复数据、利用现有表创建新表
分类: WebService
一.参考文献
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中添加服务方法,代码如下:
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程序如下所示:
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 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);
另外一种是
call2.setReturnType(new QName("http://www.w3.org/2001/XMLSchema","string"));
这两种方法是等价的。
http://blog.csdn.net/xw13106209/article/details/7067495
发表评论
-
rest 之 主题笔记
2014-03-22 09:59 8011、Web 服务主要有三种形式:SOAP、REST 和 RPC ... -
架构Web Service 之 描述与注册,发布Web服务
2013-06-12 19:31 0架构Web Service: 描述与注 ... -
soap wsdl
2013-06-12 19:29 0Web Service概述 Web Service的定义 ... -
Axis2 之 开发Java Web服务
2013-06-12 19:28 0概述 本文介绍了一个比较简单实用的基于Java的S ... -
Axis2 之 利用JiBX把XML转换Web服务
2013-06-12 19:18 0[ http://blog.csdn.net/phantomh ... -
AXIS2 之 Axis序列化/反序列化器开发指南
2013-06-12 19:15 0薛谷雨 rainight@126.com 联系。 http:/ ... -
Axis2 之 复合类型数据的传递
2013-06-12 18:50 0axis2开发指南 http://www.360doc.com ... -
Axis 之 soap wsdl
2013-06-12 18:01 0http://www.mohappy.com/blog/use ... -
Axis1.4
2013-06-12 17:58 0http://www.blogjava.net/xiaodao ... -
Axis 之 开发详细注释
2013-06-12 17:55 0http://www.360doc.com/content/1 ... -
Axis 之 WebService测试,开发,部署
2013-06-12 17:52 0带抓图的word文档在:http://618119.com/d ... -
axis 之 传递复杂类型
2013-06-12 17:49 1330从客户端除了传递字符串以外还可以传递复杂对象(对象必须序列化了 ... -
Axis 之 axis三种开发方式
2013-06-12 17:43 1508Tomcat+Axis+Eclipse实例讲解 一、 ... -
在AXIS服务间传递JavaBean及其安全解决
2013-06-12 17:17 2605-------------------1、AXIS学习笔记-- ... -
web Service客户端调用
2013-06-12 16:30 0客户端调用 目前我用了2种调用方法 Client.java p ... -
利用HttpURLConnection实现SOAP调用
2013-05-26 21:42 6266我们完全可以利用J2SE中 ... -
WebService总结1
2012-09-28 23:31 1160web service大致有三 ... -
JAVA中三种WebService规范及底层实例
2012-09-28 23:19 3743http://www.360doc.com/conte ... -
WebService大讲堂系列之Axis2
2012-09-28 01:28 962http://www.360doc.com/conte ... -
Axis2+wsdl2java.bat生成客户端调用
2012-09-28 00:45 27623http://www.360doc.com/c ...
相关推荐
在Java中调用.NET Web服务涉及的技术主要是SOAP(Simple Object Access Protocol)和WS-I(Web Services Interoperability),因为.NET Web服务通常是基于这些标准构建的。为了实现这种跨平台通信,Java开发者需要...
【Java 调用 .NET WebService 基础知识】 在软件开发中,跨平台交互是常见的需求,Java 和 .NET 平台之间的通信可以通过 WebService 实现。本篇将详细讲解如何使用 Java 调用 .NET 开发的 WebService。 1. **...
Java调用.NET WebService是跨平台通信的一种常见方式,尤其在企业级应用中,不同技术栈的应用需要相互交互数据时,这种技术尤为实用。Apache Axis是Java中常用的用于调用Web服务的工具,它提供了方便的API来创建和...
本文将详细讲解如何使用Java调用.NET发布的Web Service(ASMX),并解决在此过程中可能出现的SOAPAction报错和“Server not identified”错误。 首先,我们需要了解ASMX。ASMX是.NET Framework早期版本中用于创建...
java调用.net webservice
Java调用.NET的WebService接口实例,jar包删减到三个,干净清爽,里面包含注多注释和图解,搞了半天的家伙拿出来与大家分享,无任何BUG,修改里面的参数即可直接运行,对于这种好东西,花了半天时间10分不算高,重在...
本示例探讨的主题是“Java调用.NET Web Service”,这涉及到不同技术栈之间的互操作性,主要利用了Java的SOAP(Simple Object Access Protocol)客户端库来与.NET的Web服务进行通信。下面我们将详细解析这一过程。 ...
当然可以调用任何 wsdl地址。只要是webservice 这里是比较流行的。 这里有2个测试地址。 (1):http://www.webservicex.com/stockquote.asmx<br>(2):...
本文将深入探讨如何使用POST方式在.NET中调用.NET和Java编写的Web服务,并以XML作为请求数据格式。以下是对这个主题的详细阐述: 1. **什么是Web服务**: Web服务是一种基于互联网的软件应用,允许不同系统间的...
Java调用.NET的Web服务(WebService)是一种跨平台、跨语言的通信方式,它允许不同技术栈的应用程序之间共享功能和服务。在这个场景中,Java应用作为客户端,通过HTTP协议调用由.NET框架构建的Web服务。本文将详细...
标题提到的“用java调用.net接口的方法”就是解决这个问题的一种技术实践。以下将详细讲解三种主要的实现方式,以及如何通过提供的源代码进行操作。 首先,我们要理解Java和.NET之间的互操作性通常依赖于Web服务...
### Android调用.NET WebService详解 #### 一、概述 在Android开发中,与服务器进行交互是必不可少的一个环节。常见的交互方式包括HTTP请求、RESTful API等,而WebService作为一种传统但依然广泛使用的通信协议,...
在IT行业中,跨平台通信...总之,Java通过JAX-WS可以轻松地调用.NET Web服务。在处理涉及Cookie的会话时,关键在于正确设置请求头并解析响应头中的Cookie信息。了解这些机制有助于构建可靠、健壮的跨平台通信解决方案。
- 在“javadot.doc”文件中,可能会详细描述Java应用程序如何使用JAX-WS调用.NET Web服务的步骤,包括解析WSDL,生成客户端代理类,以及如何通过这些代理类调用服务。 - “Web Service调用方式.doc”可能涵盖了...
java采用axis调用.net写的WebService,WebService的参数有传人和传出,传出的参数为ref,java端ParameterMode.OUT,传人的为ParameterMode.IN,WebService返回值为String,java利用Map取传出参数,对Map进行遍历取得...
Java Axis调用.NET WebService实现短信收发是一个跨平台、跨语言的通信技术应用实例。在本文中,我们将深入探讨这个主题,了解如何利用Java的Axis框架与.NET环境中的WebService进行交互,特别是在短信发送和接收方面...
【Java调用.NET WebService详解】 在跨平台的软件开发中,Java与.NET之间的互操作性是一个重要的话题。本文将详细介绍如何使用Java调用.NET构建的Web服务,以获取天气预报为例,展示具体步骤和代码实现。 首先,...
在Java中调用.NET编写的ASMX WebService是一种常见的跨平台交互方式,允许Java应用程序利用.NET框架提供的服务。本文将详细介绍如何使用Apache Axis库来实现这一功能,以及处理.NET WebService返回的对象,特别是...
总的来说,Java调用.NET WebService涉及的主要步骤包括:创建Service和Call对象,配置调用参数,设置SOAPAction,并执行调用。需要注意的是,跨平台通信可能会受到不同框架的实现差异影响,因此在遇到问题时,调整...
总之,Java调用.NET/C#的Web服务是一个涉及网络通信、SOAP协议、类型转换等多个技术层面的过程,需要对Java和.NET平台都有一定的理解。正确配置和使用相关的工具库,可以有效地实现跨平台的通信。