一起谈.NET技术,Java与.NET的WebServices相互调用

简介:   本文包括两个部分,第一部分介绍了如何用.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,第二部分介绍了如何用Java做客户端调用.NET开发的Web Services。  
  项目需要的工具 

  ◆WindowsXP Professial(IIS)

  ◆Eclipse3.1(已装好Tomcat axis)

  ◆VS.Net 2003

  备注:下载安装Tomcat5.5.16 以及 Axis的开发包,并做相应配置。看我前一片文档。

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

  1.生成一个JavaWeb 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# 代码:

 
 
1 . protected System.Web.UI.WebControls.TextBox txtName;
2 . protected System.Web.UI.WebControls.Button btnSend;
3 . protected System.Web.UI.WebControls.Label lblMsg;
4 .
5 . private JavaWebService.HelloClientService ws;
6 . private void Page_Load(object sender, System.EventArgs e)
7 . {
8 . // 在此处放置用户代码以初始化页面
9 . ws = new testWebService.JavaWebService.HelloClientService();
10 . }
11 .
12 . private void btnSend_Click(object sender, System.EventArgs e)
13 . {
14 . lblMsg.Text = ws.getName(txtName.Text);
15 . }

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

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

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

  C# 代码:

 
 
1 . // 指定SoapAction
2 . [SoapRpcMethod(Action = " http://www.xxx.com/Rpc " ,
RequestNamespace
= " http://www.xxx.com/SU " ,
      ResponseNamespace
= " http://www.xxx.com/SU " )]
3 . [WebMethod]
4 . public string getName(string name)
5 . {
6 . return " Hello " + name;
7 . }

  然后运行它,并利用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技术,它们之间的相互通信需要作特殊处理。

目录
相关文章
|
2天前
|
SQL 监控 Java
技术前沿:Java连接池技术的最新发展与应用
本文探讨了Java连接池技术的最新发展与应用,包括高性能与低延迟、智能化管理和监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,为开发者提供了一份详尽的技术指南。
17 7
|
4天前
|
移动开发 前端开发 Java
过时的Java技术盘点:避免在这些领域浪费时间
【10月更文挑战第14天】 在快速发展的Java生态系统中,新技术层出不穷,而一些旧技术则逐渐被淘汰。对于Java开发者来说,了解哪些技术已经过时是至关重要的,这可以帮助他们避免在这些领域浪费时间,并将精力集中在更有前景的技术上。本文将盘点一些已经或即将被淘汰的Java技术,为开发者提供指导。
29 7
|
2天前
|
Java 数据库连接 数据库
优化之路:Java连接池技术助力数据库性能飞跃
在Java应用开发中,数据库操作常成为性能瓶颈。频繁的数据库连接建立和断开增加了系统开销,导致性能下降。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接,显著减少连接开销,提升系统性能。文章详细介绍了连接池的优势、选择标准、使用方法及优化策略,帮助开发者实现数据库性能的飞跃。
14 4
|
2天前
|
SQL Java 数据库连接
打破瓶颈:利用Java连接池技术提升数据库访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,避免了频繁的连接建立和断开,显著提升了数据库访问效率。常见的连接池库包括HikariCP、C3P0和DBCP,它们提供了丰富的配置选项和强大的功能,帮助优化应用性能。
16 2
|
4天前
|
前端开发 Java API
过时Java技术的退役:这些技能你不再需要掌握!
【10月更文挑战第22天】 在快速变化的技术领域,一些曾经流行的Java技术已经逐渐被淘汰,不再适用于现代软件开发。了解这些过时的技术对于新手开发者来说尤为重要,以避免浪费时间和精力学习不再被行业所需的技能。本文将探讨一些已经或即将被淘汰的Java技术,帮助你调整学习路径,专注于那些更有价值的技术。
15 1
|
5天前
|
移动开发 前端开发 JavaScript
java家政系统成品源码的关键特点和技术应用
家政系统成品源码是已开发完成的家政服务管理软件,支持用户注册、登录、管理个人资料,家政人员信息管理,服务项目分类,订单与预约管理,支付集成,评价与反馈,地图定位等功能。适用于各种规模的家政服务公司,采用uniapp、SpringBoot、MySQL等技术栈,确保高效管理和优质用户体验。
|
15天前
|
存储 Java 大数据
该到重点啦—java的核心技术
该到重点啦—java的核心技术
11 1
|
17天前
|
安全 Java API
🌟探索Java宇宙:深入理解Java技术体系与JVM的奥秘
本文深入探讨了Java技术体系的全貌,从Java语言的概述到其优点,再到Java技术体系的构成,以及JVM的角色。旨在帮助Java开发者全面了解Java生态,提升对Java技术的认知,从而在编程实践中更好地发挥Java的优势。关键词:Java, JVM, 技术体系, 编程语言, 跨平台, 内存管理。
27 2
|
16天前
|
SQL Java API
深入探索Java的持久化技术——JPA(Java Persistence API)
【10月更文挑战第10天】深入探索Java的持久化技术——JPA(Java Persistence API)
13 0
|
16天前
|
Java API 数据库
深入探索Java的持久化技术——JPA(Java Persistence API)
【10月更文挑战第10天】深入探索Java的持久化技术——JPA(Java Persistence API)
19 0