[zz]Java与.NET 的Web Services相互调用

原创 2007年10月04日 23:06:00

一:简介

        本文介绍了Java.NET开发的Web Services相互调用的技术。本文包括两个部分,第一部分介绍了如何用.NET做客户端调用Java写的Web Services,第二部分介绍了如何用Java做客户端调用.NET开发的Web Services

 

二:项目需要的工具       

        Windows2000 Server(IIS)

Jbuilder9.0 含有Tomcat , axis

        JDK1.4+Java Web Services Develop

        VS.Net 2003

备注:如果没有JBuilder的话就需要自己下载安装Tomcat4.1 以及 Axis的开发包,并做相应配置。由于网上有很多这样的文章,这里就不一一说明了。

 

三:用.NET做客户端调用Java写的Web Services

1. 生成一个Java Web Services

使用JBuilder 生成一个Web Services是非常简单的,我完全是按照它的帮助做的,只要一步步做

下去就可以了。具体路径是Developing Web Services -> tutorials : Web Services(Axis) -> Creating a simple Web Services 

2. 发布这个Web Services并得到它的WSDL

Web Services生成好之后,F9运行这个项目。然后,单击View浏览现有的Web 服务,单击Bean1WSDL连接,我们可以在浏览器中察看它的WSDL描述。在浏览器地址栏复制WSDL地址,为下一步使用.NET开发客户端调用程序做准备。

3. VS.NET生成一个.NET的客户端

新建一个项目(WinForm,ASP.net都可以),我在这里使用的是一个Asp.Net项目。在起始页面上放置一个文本输入框用来显示调用Web Services的结果,放置一个按钮,用来单击调用Web Services。然后,选择添加Web 引用,在WSDL一栏中把刚才得到的WSDL地址复制过来,Web 引用的名称输入JavaService,单击添加引用按钮就可以了。此时,我们可以在VS.net Solution Explore中看到这个Web 引用。

 在按钮的单击事件中输入下列代码:

JavaService.Bean1 bean = new JavaService.Bean1();

TextBox1.Text = bean.getSample.ToString ();

 

这样,一个.NET客户端就完成了,测试一下,工作正常,OK.

 

四:用Java做客户端调用.NET写的 Web Services

        有了上面的成功,使我以为用Java做客户端调用也是一件十分容易的事情,可实际情况却耗费了我两天时间才得以实现。

1. VS.NET新建一个Asp Web Services工程,添加一个web 服务,命名为SumService.asmx。新增一个web method,代码如下:

       [WebMethod]

public int IntAdd(int a,int b)

{

  return a+b ;

}

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

2. 打开jbuilder9.0,新建一个项目,添加一个java class ,命名为TestNetService,输入下列代码: 

       package MyWebServiceJavaClient;

import java.util.Date;

import java.text.DateFormat;

import java.util.Date;

import java.text.DateFormat;

import org.apache.axis.client.Call;

import org.apache.axis.client.Service;

import javax.xml.namespace.QName;

import java.lang.Integer;

import javax.xml.rpc.ParameterMode;

 

/**

 * <p>Title: </p>

 * <p>Description: </p>

 * <p>Copyright: Copyright (c) 2004</p>

 * <p>Company: </p>

 * @author not attributable

 * @version 1.0

 */

 

public class TestNetService {

  public TestNetService() {

      }

 

      public static void main(String[] args) {

          try {

            Integer i = new Integer(1);

            Integer j = new Integer(2);

            String endpoint="http://localhost/MyServices/WebServiceTest/SumService.asmx";

 

            Service service = new Service();

            Call call = (Call)service.createCall();

 

            call.setTargetEndpointAddress(new java.net.URL(endpoint));

            call.setOperationName(new QName("http://www.my.com/SU","IntAdd"));

 

            call.addParameter("a",org.apache.axis.encoding.XMLType.XSD_DATE,javax.xml.rpc.ParameterMode.IN);

            call.addParameter("b",org.apache.axis.encoding.XMLType.XSD_DATE,javax.xml.rpc.ParameterMode.IN);

            call.setReturnType(org.apache.axis.encoding.XMLType.XSD_INT);

            call.setUseSOAPAction(true);

            call.setSOAPActionURI("http://www.my.com/Rpc");

 

 

           Integer k = (Integer)call.invoke(new Object[]{i,j});

 

            System.out.println( "result is  "  + k.toString() + ".");

          }

          catch (Exception e) {System.err.println(e.toString());}

        }

 

}

 

运行上面的java客户端程序,你会发现系统会抛出一个SoapAction异常。奇怪,怎么会错误呢?想到了我开发的asp web services没有指定SoapAction,于是在SumService.asmx中的 [web method] 的上一行添加下列代码:

[SoapRpcMethod(Action="http://www.my.com/Rpc",RequestNamespace="http://www.my.com/SU",ResponseNamespace="http://www.my.com/SU")]     

重新编译运行asp web services后,在执行java程序,这时会发现输出了正确的结果3

这样,用java调用.net生成的web services也算初步完成了,好像也不是很复杂是吧。其实,在实际工作中,我一开始并没有在网上找到一个很好的代码例子,全部是依靠jbuilder axis的帮助完成的, 可总是提示什么找不到相应的SoapAction。而实际上,我在运行了asp web services后是可以在IE浏览器中看到那个SoapAction的。我试验过将默认的SoapAction拷贝到java代码中,但是java客户端依然抛出同样的异常,这要我也很迷惑。

 

五:总结

        经过两天的试验,终于从技术上明确了通过Web Services实现.net java的互通是可能的。当然有几点是需要注意的:

1. 在提供Web Services的时候,尽量使用xml schema中支持的变量类型做参数。如果使用.net 中的dataset这种类型,对于java来说解析起来将是一个灾难,当然,理论上是可以解析的。但是从效率角度来说,在Web Services与客户端交换信息的过程中,始终有一个序列化和反序列化的问题。如果使用dataset这种类型,系统还需要对它进行序列化操作,这将是一个很耗费资源的过程。而使用string类型将简单很多。

2. 如果使用了soap header等扩展功能,例如使用了微软提供的WSE技术,它们之间的相互通信需要作特殊处理。请参见:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwse/html/wsejavainterop.asp

 

本文参考:

http://forum.java.sun.com/thread.jsp?thread=386360&forum=331&message=1661636

 

[zz from rottenapple http://tb.blog.csdn.net/TrackBack.aspx?PostId=11033]

 

Java与.NET 的Web Services相互调用

Java与.NET 的Web Services相互调用 一:简介        本文介绍了Java与.NET开发的Web Services相互调用的技术。本文包括两个部分,第一部分介绍了如何用.NET...
  • rottenapple
  • rottenapple
  • 2004年03月05日 13:42
  • 946

Java与.NET 的Web Services相互调用

一:简介   本文介绍了Java与.NET开发的Web Services相互调用的技术。本文包括两个部分,第一部分介绍了如何用.NET做客户端调用Java写的Web Services,第二部分介绍了如...
  • xiaoxiaohai123
  • xiaoxiaohai123
  • 2007年03月30日 14:00
  • 650

Java与.NET 的Web Services相互调用

         一:简介       本文介绍了Java与.NET开发的Web   Services相互调用的技术。本文包括两个部分,第一部分介绍了如何用.NET做客户端调用Java写的Web   ...
  • zhensoft163
  • zhensoft163
  • 2009年09月24日 15:09
  • 535

Java与.NET 的Web Services相互调用

google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";...
  • java169
  • java169
  • 2008年05月25日 00:43
  • 222

java与.net开发的web services相互调用

一:简介 本文介绍了java与.net开发的web services相互调用的技术。本文包括两个部分,第一部分介绍了如何用.net做客户端调用java写的web services,第二部分介绍了如何用...
  • shuilv2000
  • shuilv2000
  • 2010年01月28日 15:04
  • 343

Java与.NET 的Web Services相互调用(二)

   四:用Java做客户端调用.NET写的 Web Services  有了上面的成功,使我以为用Java做客户端调用也是一件十分容易的事情,可实际情况却耗费了我两天时间才得以实现。  1. 用VS...
  • EricBai
  • EricBai
  • 2006年06月26日 14:06
  • 1349

Java与.NET 的Web Services相互调用 (一)

  一:简介  本文介绍了Java与.NET开发的Web Services相互调用的技术。本文包括两个部分,第一部分介绍了如何用.NET做客户端调用Java写的Web Services,第二部分介绍了...
  • EricBai
  • EricBai
  • 2006年06月26日 13:35
  • 1341

java与.net的web service相互调用

一:简介 本文介绍了Java与.NET开发的Web Services相互调用的技术。本文包括两个部分,第一部分介绍了如何用.NET做客户端调用Java写的Web Services,第二部分介绍了如何用...
  • liurui110
  • liurui110
  • 2010年01月25日 15:52
  • 190

Window7搭建IIS web服务器

欢迎使用Markdown编辑器写博客这一章在计算机上安装和启动了IIS,并配置IIS WEB站点 1.首先需要安装IIS,注意win7有的系统中即使安装了IIS,在开始菜单中也是找不到的,我们先装上...
  • ZZMJ_F
  • ZZMJ_F
  • 2017年03月27日 23:54
  • 209

JAX-RS (REST Web Services) 2.0 requires Java 1.6 or newer.

maven 项目出现JAX-RS (REST Web Services) 2.0 requires Java 1.6 or newer.错误 解决办法:       这个是eclipse的...
  • xingyuexi87
  • xingyuexi87
  • 2017年08月08日 18:50
  • 1765
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[zz]Java与.NET 的Web Services相互调用
举报原因:
原因补充:

(最多只允许输入30个字)