java和c#使用hessian通信的方法

时间:2021-05-19

本文实例讲述了java和c#使用hessian通信的方法,是非常实用的技巧。分享给大家供大家参考。具体分析如下:

首先,hessian主页为:http://hessian.caucho.com/

下面通过一个简单的例子学习hessian服务:服务端为Java,客户端为C#。

先要准备好C#和Java的第三方类库,下载地址:http://hessian.caucho.com/

下载 Hssiancharp.dll及hessian-4.0.37.jar

Hessian服务端(java):

打开eclipse创建一个Dynamic Web Project,将hessian-4.0.37.jar放到lib下,大概如图所示:

创建一个通信接口IHello:

package hessian.test.server;import java.util.ArrayList;public interface IHello { String sayHello(String msg); void sayHello2(int bean); void print(String msg); HelloBean getData(HelloBean bean); ArrayList<HelloBean> getBeanList(); ComplexData getComplexData(); }

IHello接口的一个实现:HelloImpl.java

package hessian.test.server;import java.util.ArrayList;public class HelloImpl implements IHello{ public String sayHello(String msg){ return "Hello " + msg; } public void sayHello2(int bean){ System.out.println("Hello " + bean); } public void print(String msg){ System.out.println(msg); } public HelloBean getData(HelloBean bean){ HelloBean result = new HelloBean(); result.setName("lu xiaoxun a new name"); result.setAge(26); System.out.print(bean.getName()); return result; } public ArrayList<HelloBean> getBeanList(){ ArrayList<HelloBean> beans = new ArrayList<HelloBean>(); HelloBean b1 = new HelloBean(); b1.setName("lu1"); b1.setAge(26); beans.add(b1); HelloBean b2 = new HelloBean(); b2.setName("lu2"); b2.setAge(27); beans.add(b2); return beans; } public ComplexData getComplexData(){ ComplexData data = new ComplexData(); ArrayList<HelloBean> beans = getBeanList(); data.setData(beans, beans.size()); return data; }}

定义用来进行数据传输的类,两个类都必须实现Serializable接口:

HelloBean.java

package hessian.test.server;import java.io.Serializable;public class HelloBean implements Serializable { private static final long serialVersionUID = 570423789882653763L; private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge(){ return age; } public void setAge(int age){ this.age = age; }}

ComplexData.java

package hessian.test.server;import java.io.Serializable;import java.util.ArrayList;import java.util.HashMap;import java.util.Map;public class ComplexData implements Serializable{ private static final long serialVersionUID = 1L; private ArrayList<HelloBean> helloBeans; //private Map<String, HelloBean> helloBeanMap; private int number; public int getNumber(){ return number; } public ArrayList<HelloBean> getHelloBeans(){ return helloBeans; } public void setData(ArrayList<HelloBean> beans, int num){ this.number = num; this.helloBeans = beans;// helloBeanMap = new HashMap<String, HelloBean>();// for (HelloBean helloBean : beans) {// if(!helloBeanMap.containsKey(helloBean.getName()))// {// helloBeanMap.put(helloBean.getName(), helloBean);// }// } }}

web.xml内容:

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://plexData在Java服务端和C#客户端中两个HelloBean类所在的命名空间要一致。

2、类的字段要一致

用于数据传输的类的字段名和字段类型要一致(修饰类型可以不一致)。

3、服务端的类要序列化

4、尽量使用基本的数据类型
从上面的测试可以看出,传递基本的类型没有问题,传递普通的类对象没有问题,传递ArrayList的时候也没有问题(C#客户端使用Array数组),但是传递HashMap字典的时候会有问题,C#这边使用Dictionary没法对应一致,可能是由于hash函数内部实现不一致导致的,具体原因不明。

感兴趣的朋友可以测试一下本文实例,源码点击此处本站下载。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章