Java连接.Net测试(一)

    近期因为业务需要,测试了几种Java连接.Net的方法,在此作个小结,以备网友共享(下述所用工具是VS2008和MyEclipse6.5)。

   

一、通过Web Service连接:

      此种方式比较常用,网上相关的介绍文章也比较多,此次我的实现方法是:.Net的Web服务返回泛型List,Java借助中间件XFire(下载地址可搜索获得)调用服务,同样用泛型List接收。用100万条数据测试,从调用到接收完毕用时10~13秒(服务与调用在同一台机上进行)。实现步骤及示例代码下附。

 

二、通过Com组件连接(调用.Net dll):

      此种方法测试时稍费了些周折,因为网上的有些文章介绍时缺少一些步骤,所以刚开始时总是连接不成功,实在可恨。本例的实现方法是:.Net返回字符串,Java用字符串接收,然后再将字符串处理后循环赋给相应的Class类。用100万条数据测试,从调用到数据处理完毕用时3~5秒(注意:不要对字符串进行控制台输出,否则你将耗费若干分钟)。实现步骤及示例代码见本系列文章之“Java连接.Net测试(二)”。

 

三、通过IBM WebSphere MQ连接:

      IBM WebSphere MQ是收费的,并且有界面工具提供。我的实现方法是:.Net将字符串写入MQ通道,Java从通道获取字符串,再将字符串处理后循环赋给相应的Class类。用100万条数据测试,从调用到数据处理完毕用时2~5秒(注意:不要对字符串进行控制台输出,否则你将耗费若干分钟)。实现步骤及示例代码见本系列文章之“Java连接.Net测试(三)”。

 

四、通过Apache ActiveMQ连接:

      Apache ActiveMQ与上述第三种方案实现原理相同,都是通过收发消息实现数据的共享,只不过这个是开源的,没有界面工具。.Net方的实现请参看文章“ActiveMQ在C#中的应用”,文章链接:http://blog.csdn.net/bodybo/archive/2010/06/04/5647968.aspx;java方的实现网上相关的文章也比较多,大家可在网上搜下。请注意:在用apache MQ前,请先配置好Java环境变量JAVA_HOME,否则运行apache MQ服务器时可能会有问题。在此要特别感谢一个客户玲玲小姐,她让我少走了弯路,大大缩减了我了解ActiveMQ的时间。

 

 

首先贴出通过Web Service连接的实现步骤及主要实现代码,如下:

 

一、返回基本数据类型(未用XFire):

1. 编写.net web service:
新建网站-ASP .NET WEB服务(“浏览”处的路径输入“http://localhost/ASPWebService”),编写完后进行发布(示例代码如下);
using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;


/// <summary>
/// TestService 的摘要说明
/// </summary>
[WebService(Namespace = "http://mytempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.None)]
public class TestService : System.Web.Services.WebService {

    public TestService () {

        //如果使用设计的组件,请取消注释以下行
        //InitializeComponent();
    }

    [WebMethod]
    [SoapRpcMethod(Action = "http://www.duansiyang.com/Rpc", RequestNamespace = "http://www.duansiyang.com/SU", ResponseNamespace = "http://www.duansiyang.com/SU")]
    public long count(Int32 a, Int32 b) {
        return (long)(a + b);
    }

    [WebMethod]
    [SoapRpcMethod(Action = "http://www.duansiyang2.com/Rpc", RequestNamespace = "http://www.duansiyang2.com/SU", ResponseNamespace = "http://www.duansiyang2.com/SU")]
    public double randomNumber()
    {
        Random random = new Random(1);
        double radnext = random.NextDouble();
        return radnext;
    }
}

2. 编写java调用代码:

首先必须先导入axis及支持axis所需的包(axis压缩包的lib文件夹下);
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
 public void testCount(int i, int j) {
  String endPoint = "http://localhost/ASPWebService/TestService.asmx";
  try {
   //调用第一个方法count
   Service service = new Service();
   Call call = (Call) service.createCall();
   call.setTargetEndpointAddress(endPoint);
   call.setOperationName(new QName("http://www.duansiyang.com/SU", "count"));
   call.addParameter("a", XMLType.XSD_INTEGER, ParameterMode.IN);
   call.addParameter("b", XMLType.XSD_INTEGER, ParameterMode.IN);
   call.setReturnType(XMLType.XSD_LONG);
   call.setUseSOAPAction(true);
   call.setSOAPActionURI("http://www.duansiyang.com/Rpc");
   Long k = (Long) call.invoke(new Object[]{i, j});

   System.out.println("a + b = " + k);
   
   //调用第二个方法randomNumber
   service = new Service();
   call = (Call) service.createCall();
   call.setTargetEndpointAddress(endPoint);
   call.setOperationName(new QName("http://www.duansiyang2.com/SU", "randomNumber"));
   call.setReturnType(XMLType.XSD_DOUBLE);
   call.setUseSOAPAction(true);
   call.setSOAPActionURI("http://www.duansiyang2.com/Rpc");
   Double m = (Double) call.invoke(new Object[0]);

   System.out.println("随机数是:" + m);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
编写完后就可执行main方法进行调用。

 

二、返回List类型(借助XFire中间件):

1. 编写.net web service:
新建网站-ASP .NET WEB服务(“浏览”处的路径输入“http://localhost/ASPWebService”),编写完后进行发布(示例代码如下);

using System;
using System.Web;
using System.Collections.Generic;
using System.Web.Services;
using System.Web.Services.Protocols;
using aspwebservice.model;
[WebService(Namespace = "http://mytempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class TestService : System.Web.Services.WebService {

    public TestService () {

        //如果使用设计的组件,请取消注释以下行
        //InitializeComponent();
    }

    [WebMethod]
    public List<User> getList()
    {
        List<User> list = new List<User>();
        for (int i = 0; i < 300000; i++)
        {
            User user = new User();
            user.UserId = i;
            user.UserName = "aa" + i;
            user.Password = "bb" + i;

            list.Add(user);
        }
        return list;
    }
}

2. 编写java调用代码:

当然首先要做的是下载XFire包,官方下载:http://xfire.codehaus.org/Download

A> 新建Web Service Project,输入项目名,并选取下方的XFire选项,一路按要求创建下去。

B> 导入XFire及支持XFire所需的包(XFire压缩包的lib文件夹下,不必全部导入,按官网上的导包说明导入即可);

C> 在src目录下新建一个包;

D> 在刚建的Web Service Project项目名上右击,选Other-MyEclipse-web service-web service client;project选Web Service Project项目,并点选下面的XFire;下一步中:WSDL URL中输入net中的服务地址,如:http://localhost/ASPWebService/TestService.asmx?wsdl,package选src下的包,然后一路下去,MyEclipse会完成绝大部分的代码构建。

E> 在构建好的client类的main方法中添加,如:
    public static void main(String[] args) {
     
        TestServiceClient client = new TestServiceClient();
       
  //create a default service endpoint
        TestServiceSoap service = client.getTestServiceSoap();
       
  ArrayOfUser array = service.getList();  //ArrayOfUser是包含返回值List<User>的类(自动生成的),User类也是自动生成的
  List<User> list = array.getUser();
       
  System.out.println(list.size());
//  for (User user : list) {
//   System.out.println(user.getUserId() + "  " + user.getUserName() + "  " + user.getPassword());
//  }
  System.exit(0);
    }

 

 

通过Com组件连接及通过WebSphere MQ连接的实现分别见本系列文章之Java连接.Net测试(二)、Java连接.Net测试(三)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值