一起谈.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

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

时间: 2024-09-25 17:14:33

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

Java与.NET的WebServices相互调用

  一:简介 本文介绍了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的开发包,并做相应配置.看我前

浅谈js中子页面父页面方法 变量相互调用_javascript技巧

(1)子页面调用父页面的方法或者变量: window.parent.方法()或者变量名 window.parent相当于定位到父页面  之后的操作和在父页面中写代码一样写 window.parent.aa();//调取aa函数 window.parent.bb;//调取bb变量 例如:想在子页面中得到id为aaa的文本框的值 window.parent.$("#aaa").val();//这种写法的前提是引用了jquery window.parent.getElementById(&q

浅谈PHP中静态方法和非静态方法的相互调用

在PHP的非静态方法中可以调用静态方法 class test{ public static function strPrint(){ echo 'this is strPrint static function<br>'; } public function staticFuncInvoke(){ self::strPrint(); } } $test = new test(); $test->staticFuncInvoke(); 上面的代码会输出: this is strPrint

一起谈.NET技术,不附加数据库 ASP.NET调用.sql文件

笔者好久没有写随笔了,这次是遇到提出这样的问题"不用附加数据库,什么修改web.config什么的那么麻烦,而是直接运行一个页面,然后根据向导一步一步引导用户安装生成数据库"那么这样做就需要一个创建数据库的语句和创建这些数据库表的语句,还有这些创建数据库视图以及函数的语句.创建数据库语句好办, "IF Not EXISTS (select name from master.dbo.sysdatabases where name = N'" + DataBaseNam

一起谈.NET技术,不要在using语句中调用WCF服务

如果你调用WCF服务时,像下面的代码这样在using语句中进行调用,需要注意一个问题. using (CnblogsWcfClient client = new CnblogsWcfClient()){ client.Say("Hello, cnblogs.com!");} 上面这段代码看上去没问题,CnblogsWcfClient是一个自动生成的WCF客户端代理,继承自System.ServiceModel.ClientBase.using语句结束时,会调用ClientBase实现的

一起谈.NET技术,JAVA与.NET的相互调用——利用JNBridge桥接模式实现远程通讯

分布式开发的历史 利用Remote方式调用远程对象实现服务器与客户端之间通讯是一种常用的网络开发方式,在.NET与JAVA开发当中,对Remote远程对象早已有着足够的支持(对Remote远程对象调用有兴趣的朋友欢迎参考一下利用远程对象实现分布式开发). 从2003年开始.NET当中就盛传着.NET Remoting远程对象调用的分布式开发,.NET Remoting主要用于管理跨应用程序域的同步和异步RPC 会话.在默认情况下,Remoting可以使用 HTTP 或 TCP 协议进行信息通讯,

一起谈.NET技术,JAVA与.NET的相互调用——通过Web服务实现相互调用

JAVA与.NET是现今世界竞争激烈的两大开发媒体,两者语言有很多相似的地方.而在很多大型的开发项目里面,往往需要使用两种语言进行集成开发.而很多的开发人员都会偏向于其中一种语言,在使用集成开发的时候对另一种语言感觉到畏惧.在这里在下向各位介绍一下,JAVA与.NET相互调用的例子.下面的介绍主要包括三方面:一是通过常用Web服务进行相互调用,二是使用TCP/IP套接字进行相互调用,三是使用Remote实现远程对象相互调用. 在这章里面先为大家介绍一下最简单,最常用的Web服务相互调用方式.首先

语音读取文档技术java技术的开发

问题描述 语音读取文档技术java技术的开发 我想做一个语音读取,电子书的开发软件 ,就是想问问,现在的这些软件开发的优缺点在什么地方? 解决方案 主要的难题是朗读,毕竟机器的智能不如人类,读起来会有些不像. 另外就是电子书的阅读体验不同于纸质书,所以需要优化.举一个简单的例子,人翻阅纸质书寻找一个有插图的章节,可能一秒钟看100页,很快就找到了. 可是电脑的速度有限,你做电子书加载页面肯定有延迟,就达不到这样的流畅度.

《创业家》牛文文:少谈点模式多谈点技术

"模式"如同当年的"主义",流行于各种创业大赛.创业励志节目.论坛的"街头"式秀场 文/创业家 牛文文 "美国某某公司你知道吧?就是刚被戴尔.惠普.思科十几亿美元抢购的那家.我们的模式和它的一样,现在还没赢利,可将来起码有十几亿人民币的市值." "我开了小煤矿,但煤运不出去,上商学院之后受到启发,想搞模式创新,具体讲就是想在铁路边上搞个煤炭物流开发区,建一个大的物流和信息流平台,把分散的煤炭集中在我这个园区,这样和铁