一:简介
本文介绍了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# 代码
-
- [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技术,它们之间的相互通信需要作特殊处理。可以看我下一篇文章。
分享到:
相关推荐
4. **代理类(Proxy Class)**:Java通过Wsimport工具或者IDE(如Eclipse、IntelliJ IDEA)自动生成.NET Webservices的Java代理类,这些类封装了与服务的交互逻辑,使得开发者可以像调用本地方法一样调用远程Web ...
本文将详细介绍如何在Java中调用.NET Web服务,涉及的关键技术包括WSDL(Web Services Description Language)、JAX-WS(Java API for XML Web Services)以及一些必要的工具和步骤。 1. **理解WSDL**: WSDL是描述...
总的来说,调用.NET接口在Java中可以通过标准Web服务方式或RESTful接口实现,选择哪种方法取决于.NET接口的具体设计和项目需求。熟悉这些技术对于提高跨平台开发的效率至关重要。记得在实际应用中,一定要确保兼容性...
本示例探讨的主题是“Java调用.NET Web Service”,这涉及到不同技术栈之间的互操作性,主要利用了Java的SOAP(Simple Object Access Protocol)客户端库来与.NET的Web服务进行通信。下面我们将详细解析这一过程。 ...
本文将详细介绍如何通过Web服务实现Java与.NET之间的相互调用。 首先,理解Web服务的基础概念至关重要。Web服务是一种基于标准协议(如HTTP、SOAP)的应用程序,可以执行从简单请求到复杂业务处理的各种任务。一旦...
本文将详细讲解如何使用Java调用.NET发布的Web Service(ASMX),并解决在此过程中可能出现的SOAPAction报错和“Server not identified”错误。 首先,我们需要了解ASMX。ASMX是.NET Framework早期版本中用于创建...
【Java与.NET的Web服务调用详解】 在分布式系统中,Web服务作为一种标准的通信机制,使得不同平台、不同语言的应用程序能够相互通信。本文将深入探讨Java和.NET之间如何进行Web服务调用,帮助开发者理解这两种技术...
.NET Webservices 代理类是.NET Framework为方便开发者调用Web服务提供的一种重要工具。 首先,我们需要理解什么是代理类。在编程中,代理类是一种特殊类型的类,它作为客户端与远程服务之间的中介。当客户端需要...
【Java与.NET的相互调用】是现代软件开发中的一项重要技术,特别是在多语言环境下的系统集成。本文主要探讨了三种方法实现这种调用:Web服务、TCP/IP套接字和Remoting,其中Web服务是最常见和简便的方式。 **Web...
标题中的“通过js调用java与.net开发的webservices”是指使用JavaScript来调用由Java或.NET框架构建的Web服务。这种技术允许前端JavaScript代码与后端服务进行交互,实现数据的交换和业务逻辑的执行。下面将详细介绍...
.NET Web服务通常基于SOAP(Simple Object Access Protocol)协议,而Java可以通过使用JAX-WS(Java API for XML Web Services)来消费这些服务。 在Java中访问.NET Web服务的第一步是生成客户端代理类。这通常通过...
在.NET开发环境中,有时我们需要与Java应用程序进行交互,特别是通过Web服务进行数据交换。本文将深入探讨如何使用POST方式在.NET中调用.NET和Java编写的Web服务,并以XML作为请求数据格式。以下是对这个主题的详细...
在Java中调用.NET Web服务涉及的技术主要是SOAP(Simple Object Access Protocol)和WS-I(Web Services Interoperability),因为.NET Web服务通常是基于这些标准构建的。为了实现这种跨平台通信,Java开发者需要...
总结来说,ASP.NET通过WebService调用Java接口的过程主要包括:部署Java WebService、在.NET项目中添加Web引用、配置项目设置、在代码中实例化并调用服务方法,以及理解背后涉及的SOAP和RMI通信机制。这个过程允许...
值得注意的是,从VS2010开始,不再直接提供ASP.NET Web Services模板,但可以通过其他途径实现与VS2008相同的功能。 在实际开发中,选择Java还是.NET作为服务端和客户端,主要取决于项目需求、团队技术栈以及对跨...
在.NET开发环境中,有时我们需要与Java Web服务进行交互,实现跨平台的数据交换和功能调用。这涉及到一种称为“互操作性”(Interoperability)的技术,它允许不同编程语言和平台之间的通信。本文将详细讲解如何在...