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

转载 2006年06月26日 14:06:00

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

相关文章推荐

VC++6.0调用Web Services(可以是c#,java,vc++.net等提供的服务都可以)!

本文主要讲述VC++6.0调用Web Services的方法,其中web services可以是c#,java,vc++.net等提供的服务都可以调用!主要的大致过程如下:     需要装Soap T...

Java/.NET互操作性:Web Services 并不总是答案

原文地址:http://www.devx.com/enterprise/Article/43086/0/page/1利用Web Services 将 .NET 和 Java 技术融合很容易,但对于许多...

JAVA与.NET的相互调用——通过Web服务实现相互调用

http://kb.cnblogs.com/page/103827/ JAVA与.NET是现今世界竞争激烈的两大开发媒体,两者语言有很多相似的地方。而在很多大型的开发项目里面,往往需要使用两种语...

.NET Web Services

.NET Web Services Web services 是为处理某个有限的任务而构建的小代码单位。 什么是 Web Services?Web services 是小的代码单位Web servic...
  • zscmj
  • zscmj
  • 2011年06月28日 00:26
  • 213

ASP.NET、OWC 和 SQL Server 2000 Analysis Services 构建了基于 Web 的 OLAP 报表应用

摘要   许多机构都使用在线分析处理(OLAP)技术分析其关键业务数据。基于 OLAP 的数据钻取为查询多维数据集以及通过钻取数据来获得模式提供了一种途径。ASP.NET 和 Microsoft Of...

asp.net Web Services上传和下载文件(完整代码)

下面,我们就分别介绍如何通过Web Services从服务器下载文件到客户端和从客户端通过Web Services上载文件到服务器。 一:通过Web Services显示和下载文件 我们这里建立...

来自知乎-Web 建站技术中,HTML、HTML5、XHTML、CSS、SQL、JavaScript、PHP、ASP.NET、Web Services 是什么?

一个学期前我也和楼主差不多不知道这些都是啥,一个学期之后差不多都弄懂了,来讲讲自己的理解吧 > 首先要知道网站访问大概是什么个过程: 假设你在浏览器地址栏输入这个问题的地址 http:...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java与.NET 的Web Services相互调用(二)
举报原因:
原因补充:

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