java服务和net服务_Java与.NET 的Web Services相互调用

来源: http://gocom.primeton.com/blog1012_1660.htm?PHPSESSID=3b2b8038fc18ae683272e4e4452b206d

一:简介

本文介绍了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。代码如下:

publicclassHelloClient

{publicString getName(String name)

{return"Hello,"+name;

}

}

新建一个项目(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 引用。

添加代码如下:

protectedSystem.Web.UI.WebControls.TextBox txtName;protectedSystem.Web.UI.WebControls.Button btnSend;protectedSystem.Web.UI.WebControls.Label lblMsg;privateJavaWebService.HelloClientService ws;privatevoidPage_Load(objectsender, System.EventArgs e)

{//在此处放置用户代码以初始化页面ws=newtestWebService.JavaWebService.HelloClientService();

}privatevoidbtnSend_Click(objectsender, 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,代码如下:

//指定SoapAction[SoapRpcMethod(Action="http://www.zjh.com/Rpc",RequestNamespace="http://www.zjh.com/SU",ResponseNamespace="http://www.zjh.com/SU")]

[WebMethod]publicstringgetName(stringname)

{return"Hello"+name;

}

然后运行它,并利用IE进行测试成功。

2. 打开Eclipse,新建一个Web项目,添加一个JSP页面 ,命名为action_hello.jsp,输入下列代码:

Service service=newService();Callcall=(Call)service.createCall();call.setTargetEndpointAddress(newjava.net.URL(endpoint));call.setOperationName(newQName("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");Stringres=(String)call.invoke(newObject[]{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技术,它们之间的相互通信需要作特殊处理。可以看我下一篇文章。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值