一:简介
本文介绍了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技术,它们之间的相互通信需要作特殊处理。可以看我下一篇文章。
分享到:
相关推荐
Java调用.net webservices实例,简单原生写法,去除复杂的框架,适合Java基础和webservices原理的学习。
封装了java调用.net的websevice接口,解决了soapaction报错和server not identified错误,使用soap1.1协议。
js调用WEBSERVICE通用函数例子,主要调用2种,基于java方面用Xfire开发的webservice(有后台源码),调用别人的基于.NET的webservice,希望对一些朋友有用
NULL 博文链接:https://thoreau.iteye.com/blog/1769264
基于 .NET, Java and MS SOAP Toolkit进行Web Services 的客户端调用程序例子
远程方法调用发展到现在,已经有以下几种框架实现:DCE/RPC,CORBA,DCOM,MTS/COM+,Java RMI,Java EJB,Web Services/SOAP/XML-RPC,NET Remoting,本文主要介绍了.NET远程方法调用的原理,实现以及与微软...
java 调用webservice的各种方法总结 现在webservice加xml技术已经逐渐成熟,但要真正要用起来还需时日!! 由于毕业设计缘故,我看了很多关于webservice方面的知识,今天和大家一起来研究研究webservice的各种使用...
如何用.net调用java或net写的webservice(遵循wsdl规则
• Create a Java Web Service Create a web application project Add web service to the project Add operations to the web service Implementing the web methodes Deploy and test the web...
项目是eclipse工具生成的,解压后可直接导入到eclipseIDE工具中,在java_web.wsdl文件中写入调用webservices的wsdl内容,然后执行src下的build(ant工具),刷新目录...本工程适用与java和.net开发的webservices服务。
JAVA的WebService支持.pdf Java和.NET_的WebServices相互调用.pdf Sun_Webservice_教程.pdf Web_Service开发指南_2[1].3.1.pdf
参考这两个例子就可以写出 调用 java 或.net 的webservice
如何实现异步调用web服务的代码,该调用是 ASP.net Web 服务设计器所必需的
实现C#和VB.net之间的相互转换 深入剖析ASP.NET组件设计]一书第三章关于ASP.NET运行原理讲述的补白 asp.net 运行机制初探(httpModule加载) 利用反射来查看对象中的私有变量 关于反射中创建类型实例的两种方法 ASP...
本示例使用C#构造SOAP信息,通过HttpWebRequest调用java编写的带有Windows身份验证的WebService,代码中详细注释了每行代码的功能与作用; 对应文章:http://blog.csdn.net/cgs_______/article/details/77894599
如果在你的设计中,类与类存在很强的相互关联,那么你会发现在重用这些组件时就存在很严重的问题。在 Step1到Step3-Reflection的例子中,我们试图 利用“针对接口编程”以及自己设计的Ioc对系统进行解耦。在Step3到...
例如,在Solaris上运行的Java程序能够找到并且调用运行的Windows XP上用C#语言写的代码,或者调用运行在Linux 上用Perl写的程序,而不用考虑这个服务如何实现等细节问题。常见的Web服务集是微软新的.NET策略、Sun...