社区编辑申请
注册/登录
Java与.NET的WebServices相互调用
开发 后端
本文介绍了Java与.NET开发的Web Services相互调用的技术。包括.NET与Java互相做彼此的客户端相互调用的代码实现。

本文包括两个部分,***部分介绍了如何用.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代码:

  1. public class HelloClient      
  2. {      
  3. public String getName(String name)      
  4. {      
  5. return "Hello,"+name;      
  6. }      
  7. }    

右键此文件选择"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代码:

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

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

 

【编辑推荐】

  1. .NET与J2EE之争 选择更适合自己的平台
  2. ASP.NET页面请求原理浅析
  3. 关于能提高Java代码可重用性的三个措施
  4. .NET 4.0 Beta 1将为PLINQ带来生机?
  5. 浅谈.NET开发中多线程思维方式
责任编辑:佚名 来源: 博客园
相关推荐

2022-06-05 21:09:47

Python办公自动化

2022-06-27 09:54:38

编程语言JavaC++

2022-06-28 09:34:24

可视化Python代码

2022-06-01 11:14:42

Java代码技巧

2022-06-27 17:46:53

PythonFlask

2022-06-13 12:43:13

Java模块

2022-05-06 20:18:36

2022-04-27 09:30:01

Python爬虫人工智能

2022-06-26 09:55:00

接口自动化项目

2022-06-21 09:02:49

python技巧

2022-06-22 08:02:11

2022-06-16 14:07:26

Java代码代码review

2022-05-05 09:27:31

Linux服务器优化

2022-06-21 09:27:01

PythonFlaskREST API

2009-07-24 16:05:05

调用Web ServiASP.NET

2022-06-04 14:43:31

Windows 10出厂设置重装

2022-06-23 13:13:36

GitHub开发技巧

2022-06-06 09:56:38

编程语言Python

2022-06-15 09:54:51

PythonIDELinux

2022-06-16 08:35:10

CSS属性前端

同话题下的热门内容

源码探秘:Python 中对象是如何被调用的?吐血推荐17个提升开发效率的“轮子”超全!Python 中常见的配置文件写法Pandas 新手容易犯的六个错误Python 中的万能之王 Lambda 函数整理了100个Python精选库,建议收藏!Python进行数据可视化,你会用什么库来做呢?Spring MVC中@InitBinder注解是如何应用的?

编辑推荐

使用Kotlin做开发一个月后的感想面试官问你什么是消息队列?把这篇甩给他!五大自动化测试的Python框架图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)2018年最流行的十大编程语言,其中包括你用的语言吗?
我收藏的内容
点赞
收藏

51CTO技术栈公众号