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的开发包,并做相应配置。看我前一片文档。

三:用.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# 代码:

code

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

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

java 代码:

code

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

引自:http://www.cnblogs.com/lzhdim/archive/2008/12/21/1359308.html


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值