一起谈.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技术,它们之间的相互通信需要作特殊处理。

目录
相关文章
|
18天前
|
存储 监控 安全
单位网络监控软件:Java 技术驱动的高效网络监管体系构建
在数字化办公时代,构建基于Java技术的单位网络监控软件至关重要。该软件能精准监管单位网络活动,保障信息安全,提升工作效率。通过网络流量监测、访问控制及连接状态监控等模块,实现高效网络监管,确保网络稳定、安全、高效运行。
46 11
|
27天前
|
XML Java 编译器
Java注解的底层源码剖析与技术认识
Java注解(Annotation)是Java 5引入的一种新特性,它提供了一种在代码中添加元数据(Metadata)的方式。注解本身并不是代码的一部分,它们不会直接影响代码的执行,但可以在编译、类加载和运行时被读取和处理。注解为开发者提供了一种以非侵入性的方式为代码提供额外信息的手段,这些信息可以用于生成文档、编译时检查、运行时处理等。
62 7
|
9天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
4天前
|
开发框架 算法 .NET
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
|
4天前
|
开发框架 Cloud Native .NET
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
|
27天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
2月前
|
传感器 人工智能 供应链
.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。
本文深入探讨了.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。通过企业级应用、Web应用及移动应用的创新案例,展示了.NET在各领域的广泛应用和巨大潜力。展望未来,.NET将与新兴技术深度融合,拓展跨平台开发,推动云原生应用发展,持续创新。
46 4
|
2月前
|
机器学习/深度学习 人工智能 Cloud Native
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台。本文深入解析 .NET 的核心优势,探讨其在企业级应用、Web 开发及移动应用等领域的应用案例,并展望未来在人工智能、云原生等方面的发展趋势。
45 3
|
2月前
|
敏捷开发 缓存 中间件
.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素
本文深入探讨了.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素,并通过企业级应用和Web应用开发的实践案例,展示了如何在实际项目中应用这些模式,旨在为开发者提供有益的参考和指导。
39 3
|
2月前
|
开发框架 安全 Java
.NET技术的独特魅力与优势,涵盖高效的开发体验、强大的性能表现、高度的可扩展性及丰富的生态系统等方面,展示了其在软件开发领域的核心竞争力
本文深入探讨了.NET技术的独特魅力与优势,涵盖高效的开发体验、强大的性能表现、高度的可扩展性及丰富的生态系统等方面,展示了其在软件开发领域的核心竞争力。.NET不仅支持跨平台开发,具备出色的安全性和稳定性,还能与多种技术无缝集成,为企业级应用提供全面支持。
36 3