一:简介 
本文介绍了Java与.NET开发的Web Services相互调用的技术。本文包括两个部分,第一部分介绍了如何用.NET做客户端调用Java写的Web Services,第二部分介绍了如何用Java做客户端调用.NET开发的Web Services。  
二:项目需要的工具  
WindowsXP Professial(IIS)

Eclipse3.1(已装好Tomcat axis)
VS.Net 2003
备注:下载安装Tomcat5.5.16 以及 Axis的开发包,并做相应配置。看我前一片文档。
三:用.NET做客户端调用Java写的Web Services 
1.生成一个Java Web Services
使用Eclipse生成一个Web Services是非常简单的。新建一个Web工程,右键建立一个Class,名为HelloClient.java。代码如下:
java 代码:

public class HelloClient    
{    
public String getName(String name)    
{    
return "Hello,"+name;    
}    
}   

右键此文件选择"WebServices"-->"Create Web Service"即可部署为本机的一个ws。在IE浏览器中输入http://localhost:8008/testWebService/services/HelloClient可以看到已经部署了的HelloClient服务。输入http://localhost:8008/testWebService/services/HelloClient?wsdl这个服务的描述文件。

新建一个项目(WinForm,ASP.net都可以),我在这里使用的是一个Asp.Net项目。在起始页面上放置一个文本输入框用来输入,一个标签用来显示调用Web Services的结果,放置一个按钮,用来单击调用Web Services。然后,选择添加Web 引用,URL一栏里填入http://localhost:8008/testWebService/services/HelloClient?wsdl,Web 引用的名称输入JavaWebService,单击添加引用按钮就可以了。此时,我们可以在VS.net 的Solution Explore中看到这个Web 引用。
添加代码如下:

c# 代码:

protected System.Web.UI.WebControls.TextBox txtName;    
protected System.Web.UI.WebControls.Button btnSend;    
protected System.Web.UI.WebControls.Label lblMsg;    
   
private JavaWebService.HelloClientService ws;    
private void Page_Load(object sender, System.EventArgs e)    
{    
// 在此处放置用户代码以初始化页面    
ws=new testWebService.JavaWebService.HelloClientService();    
}    
   
private void btnSend_Click(object sender, System.EventArgs e)    
{    
lblMsg.Text=ws.getName(txtName.Text);    
}   

这样,一个.NET客户端就完成了,测试一下,工作正常,OK.

四:用Java做客户端调用.NET写的 Web Services

1. 用VS.NET新建一个Asp Web Services工程,添加一个web 服务,命名为Service1.asmx。新增一个web method,代码如下:

c# 代码:
//指定SoapAction    
[SoapRpcMethod(Action="http://www.zjh.com/Rpc",RequestNamespace="http://www.zjh.com/SU",ResponseNamespace="http://www.zjh.com/SU")]    
[WebMethod]    
public string getName(string name)    
{    
return "Hello"+name;    
}  

然后运行它,并利用IE进行测试成功。

2. 打开Eclipse,新建一个Web项目,添加一个JSP页面 ,命名为action_hello.jsp,输入下列代码:

java 代码:
<%@page pageEncoding="GBK" contentType="text/html; charset=GBK" %>    
<%@page import="org.apache.axis.client.Call"%>    
<%@page import="org.apache.axis.client.Service"%>    
<%@page import="javax.xml.namespace.QName"%>    
java 代码
<%    
request.setCharacterEncoding("GBK");    
String name=request.getParameter("name");    
String endpoint="http://localhost/HelloClient/Service1.asmx";    
Service service = new Service();    
Call call = (Call)service.createCall();    
call.setTargetEndpointAddress(new java.net.URL(endpoint));    
call.setOperationName(new QName("http://www.zjh.com/SU","getName"));    
call.addParameter("name",org.apache.axis.encoding.XMLType.XSD_DATE,javax.xml.rpc.ParameterMode.IN);    
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);    
call.setUseSOAPAction(true);    
call.setSOAPActionURI("http://www.zjh.com/Rpc");    
String res =(String)call.invoke(new Object[]{name});    
out.print(res);    
%>    

这个要比Java调用Java写的ws来的复杂。ws和Java客户端都要设置SOAPAction,否则会有异常说 System.Web.Services.Protocols.SoapException: 服务器未能识别 HTTP 标头 SOAPAction 的值

五:总结
经过两天的试验,终于从技术上明确了通过Web Services实现.net 与 java的互通是可能的。当然有几点是需要注意的:

  1. 在提供Web Services的时候,尽量使用xml schema中支持的变量类型做参数。如果使用.net 中的dataset这种类型,对于java来说解析起来将是一个灾难,当然,理论上是可以解析的。但是从效率角度来说,在Web Services与客户端交换信息的过程中,始终有一个序列化和反序列化的问题。如果使用dataset这种类型,系统还需要对它进行序列化操作,这将是一个很耗费资源的过程。而使用string类型将简单很多。

  2. 如果使用了soap header等扩展功能,例如使用了微软提供的WSE技术,它们之间的相互通信需要作特殊处理。

引自:http://www.cnblogs.com/lzhdim/archive/2008/12/21/1359308.html

Java与.NET的WebServices相互调用的更多相关文章

  1. java JNI 的实现(2)-java和C/C++的相互调用.

    目录 概述 一,java代码 二,稍微注意通过javah生成的'C/C++'.h头文件和源java代码的关系 三,在C/C++中实现java的native方法(完整C/C++) 1,修改age,即Ja ...

  2. java与js交互,相互调用传参

    随着前端技术的发展与H5的广泛使用,移动端采用native+h5的方式越来越多了,对于Android来说就涉及到java与js的交互,相互调用传参等.下面就来看一下java与js交互的简单demo. ...

  3. Java系统和PHP系统相互调用

    一.HTTP JSON方式的缺点 JSON序列化效率低 多语言服务治理功能低 二.关于RPC框架 RPC 框架大致分为两类,一种是偏重服务治理,另一种侧重跨语言调用 2.1 服务治理型 特点 功能丰富 ...

  4. .Net 与 Java 的服务接口相互调用

    本文介绍.Net 与 Java 相互调用的例子.下面的介绍主要包括三方面:一是通过常用Web服务进行相互调用,二是使用TCP/IP套接字进行相互调用,三是使用Remote实现远程对象相互调用. 首先说 ...

  5. JAVA与.NET的相互调用——通过Web服务实现相互调用

    JAVA与.NET是现今世界竞争激烈的两大开发媒体,两者语言有很多相似的地方.而在很多大型的开发项目里面,往往需要使用两种语言进行集成开发.而很多的开发人员都会偏向于其中一种语言,在使用集成开发的时候 ...

  6. Java与.NET 的Web Services相互调用

    一:简介 本文介绍了Java与.NET开发的Web Services相互调用的技术.本文包括两个部分,第一部分介绍了如何用.NET做客户端调用Java写的Web Services,第二部分介绍了如何用 ...

  7. JAVA和C/C++之间的相互调用。

    在一些Android应用的开发中,需要通过JNI和 Android NDK工具实现JAVA和C/C++之间的相互调用. Java Native Interface (JNI)标准是java平台的一部分 ...

  8. JAVA与.NET的相互调用——利用JNBridge桥接模式实现远程通讯

    分布式开发的历史 利用Remote方式调用远程对象实现服务器与客户端之间通讯是一种常用的网络开发方式,在.NET与JAVA开发当中,对Remote远程对象早已有着足够的支持(对Remote远程对象调用 ...

  9. Android JNI学习(三)——Java与Native相互调用

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

随机推荐

  1. ElasticSearch 2 (13) - 深入搜索系列之结构化搜索

    ElasticSearch 2 (13) - 深入搜索系列之结构化搜索 摘要 结构化查询指的是查询那些具有内在结构的数据,比如日期.时间.数字都是结构化的.它们都有精确的格式,我们可以对这些数据进行逻 ...

  2. 【Leetcode】81. Search in Rotated Sorted Array II

    Question: Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? ...

  3. Python爬虫:学爬虫前得了解的事儿

    这是关于Python的第14篇文章,主要介绍下爬虫的原理. 提到爬虫,我们就不得不说起网页,因为我们编写的爬虫实际上是针对网页进行设计的.解析网页和抓取这些数据是爬虫所做的事情. 对于大部分网页来讲, ...

  4. 一本通1649【例 2】2^k 进制数

    1649:[例 2]2^k 进制数 时间限制: 1000 ms         内存限制: 524288 KB [题目描述] 原题来自:NOIP 2006 提高组 设 r 是个 2k 进制数,并满足以 ...

  5. pgm2

    MRF 笔记 我们先讨论引入 MRF 的必要性.经典的例子就是四个 r.v.s 连成一个正方形的结构的时候,我们没法通过 BN 获得给定对角线两个 r.v.s 而剩下的条件独立(不都是 d-sep), ...

  6. BZOJ2440 中山市选2011完全平方数(容斥原理+莫比乌斯函数)

    如果能够知道不大于n的合法数有多少个,显然就可以二分答案了. 考虑怎么求这个.容易想到容斥,即枚举完全平方数.我们知道莫比乌斯函数就是此种容斥系数.筛出来就可以了. 注意二分时会爆int. #incl ...

  7. #35 string(缩点+动态规划)

    容易发现有了交换相邻字符的操作后,只要字符串所含有的字符种类和数量相同其就是等价的.这样的状态只有n^3级别,将其抽象成点子串变换抽象成边后就是求最长路径了,缩点dp解决. 码量巨大,不是很明白要怎样 ...

  8. Eclipse构建项目时"An internal error occurred during: "Building workspace". Java heap space"

    出现这个错误,eclipse 会卡死,以及自动退出 解决方案 工程根目录 找到项目中.project文件 删除这两处   第一处:  <buildCommand>          < ...

  9. 【Revit API】梁的净高分析

    原理就是,先从梁的LocationCurve上取点,然后向板的上表面投影.如果有投影点,再从投影点(板上)向梁的底面投影,这时候如果有投影点的话就能得到距离了. 运用该分析的第一条件是梁是在板的上方, ...

  10. AtCoder Grand Contest 009

    AtCoder Grand Contest 009 A - Multiple Array 翻译 见洛谷 题解 从后往前考虑. #include<iostream> #include< ...