亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

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

2020-01-24 02:25:13
字體:
來源:轉載
供稿:網友

本文實例講述了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://www.w3.org/2001/XMLSchema-instance"  xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"  id="WebApp_ID" version="3.0">  <display-name>hessian server</display-name>  <servlet>    <servlet-name>hessian</servlet-name>    <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>    <init-param>      <param-name>service-class</param-name>      <param-value>hessian.test.server.HelloImpl</param-value>    </init-param>  </servlet>  <servlet-mapping>    <servlet-name>hessian</servlet-name>    <url-pattern>/hessian</url-pattern>  </servlet-mapping></web-app>

Hessian客戶端(c#):

定義一個與服務端對應的IHello接口:IHello.cs

  public interface IHello  {    String sayHello(String msg);    void sayHello2(int bean);    void print(String msg);    HelloBean getData(HelloBean bean);    HelloBean[] getBeanList();    ComplexData getComplexData();  }

定義與服務器端一致的的通信數據類:

HelloBean.cs:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace hessian.test.server{  public class HelloBean  {    public String Name     {      set { name = value; }      get { return name; }    }    private String name; //類型和名稱需要和服務器端一致    public int Age    {      set { age = value; }      get { return age; }    }    private int age; //類型和名稱需要和服務器端一致    public override String ToString()    {      return "Name: "+ name + " Age: " + age;    }  }}

ComplexData.cs:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace hessian.test.server{  public class ComplexData  {    private HelloBean[] helloBeans;    //private Dictionary<String, HelloBean> helloBeanMap;    private int number;    public int GetNumber()    {      return number;    }    public HelloBean[] GetBeans()    {      return helloBeans;    }    //public Dictionary<String, HelloBean> GetBeansDic()    //{    //  return helloBeanMap;    //}  }}

在主項目中添加Hessiancsharp.dll引用。

測試代碼:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using hessiancsharp.client;using hessian.test.server;namespace HessianClientTest{  class Program  {    static void Main(string[] args)    {      string url = @"http://localhost:8080/HessianServerTest/hessian";      CHessianProxyFactory factory = new CHessianProxyFactory();      IHello test = (IHello)factory.Create(typeof(IHello), url);      //Test function      Console.WriteLine(test.sayHello("lu"));  //打印從服務器端獲取的字符串      test.sayHello2(12);            //在服務器端控制臺打印 "Hello 12"        test.print("hessian");          //在服務器端控制臺打印 "hessian"       //Test Object      HelloBean bean = new HelloBean();      //bean.setName("lu xiaoxun");      bean.Name = "luxiaoxun";      HelloBean result = test.getData(bean);      Console.WriteLine(result.Name);      Console.WriteLine(result.Age);      Console.WriteLine(result);      //Test Object Array      HelloBean[] beans = test.getBeanList();      if (beans != null)      {        foreach (HelloBean data in beans)        {          Console.WriteLine(data.ToString());        }      }      //Test complex data      ComplexData complexData = test.getComplexData();      if (complexData != null)      {        Console.WriteLine("Array number: " + complexData.GetNumber());        HelloBean[] comArray = complexData.GetBeans();        if (comArray != null)        {          foreach (HelloBean data in comArray)          {            Console.WriteLine(data.ToString());          }        }        //Dictionary<String, HelloBean> helloBeanMap = complexData.GetBeansDic();        //if (helloBeanMap != null)        //{        //  foreach (String key in helloBeanMap.Keys)        //  {        //    Console.WriteLine(helloBeanMap[key].GetHelloBeanInfo());        //  }        //}      }      Console.ReadKey();    }  }}

測試結果如下圖所示:

注意事項:

1、服務端和客戶端用于數據傳遞的對象的命名空間要一致

IHello接口所在命名空間服務端和客戶端可以不一致,但是IHello中用到的HelloBean和ComplexData在Java服務端和C#客戶端中兩個HelloBean類所在的命名空間要一致。

2、類的字段要一致

用于數據傳輸的類的字段名和字段類型要一致(修飾類型可以不一致)。

3、服務端的類要序列化

4、盡量使用基本的數據類型
從上面的測試可以看出,傳遞基本的類型沒有問題,傳遞普通的類對象沒有問題,傳遞ArrayList的時候也沒有問題(C#客戶端使用Array數組),但是傳遞HashMap字典的時候會有問題,C#這邊使用Dictionary沒法對應一致,可能是由于hash函數內部實現不一致導致的,具體原因不明。

感興趣的朋友可以測試一下本文實例,源碼點擊此處本站下載。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品视频地址| 国产视频一区在线| 最近更新的2019中文字幕| 久久久女人电视剧免费播放下载| 国产成人在线视频| 51精品在线观看| 日韩精品极品在线观看播放免费视频| 亚洲欧洲免费视频| 国产欧美一区二区三区四区| 国产999在线观看| 欧美在线播放视频| 中文字幕欧美视频在线| 日韩精品久久久久久久玫瑰园| 国产一区视频在线播放| 欧美专区在线观看| 成人激情视频在线| 国产精品美女免费视频| 福利一区福利二区微拍刺激| 久久香蕉国产线看观看av| 欧美老女人在线视频| 日韩av免费在线播放| 国产黑人绿帽在线第一区| 亚洲精品久久久久中文字幕欢迎你| 91理论片午午论夜理片久久| 欧美国产第一页| 日本久久久久亚洲中字幕| 欧美中文字幕在线观看| 热门国产精品亚洲第一区在线| 欧美黑人xxxx| 久久久久国产精品免费网站| 亚洲精品久久7777777| 亚洲最大福利网| 久久艹在线视频| 国产精品中文字幕久久久| 68精品久久久久久欧美| 国产不卡av在线免费观看| 91黑丝在线观看| 91亚洲人电影| 自拍偷拍亚洲区| 欧美尺度大的性做爰视频| 九九热精品视频| 91成人福利在线| 在线视频欧美性高潮| 国产精品久久久久久久久久免费| 亚洲美女在线视频| 色老头一区二区三区在线观看| 亚洲精品久久在线| 久久精品免费播放| 久色乳综合思思在线视频| 97超级碰碰碰久久久| 国产精品国产福利国产秒拍| 日韩国产精品视频| 91在线免费视频| 91精品国产91久久久久福利| 亚洲午夜精品久久久久久性色| 国产午夜精品一区二区三区| 国产精品久久久久久久9999| 4388成人网| 亚洲一级免费视频| 2019中文字幕全在线观看| 亚洲国产精品999| 亚洲一区中文字幕| 91沈先生作品| 亚洲视频在线观看视频| 午夜精品视频网站| 91极品女神在线| 亚洲sss综合天堂久久| 日韩视频―中文字幕| 国产精品日韩欧美大师| 欧美在线视频观看免费网站| 久久精品青青大伊人av| 国产精品视频一| 国产97在线观看| 国产成人精品亚洲精品| 精品国产一区二区三区久久狼5月| 亚洲一区制服诱惑| 国产精品av在线| 精品成人久久av| 亚洲欧美制服综合另类| 欧美黑人国产人伦爽爽爽| 538国产精品一区二区在线| 国产精品夜色7777狼人| 国产精品ⅴa在线观看h| 久久久精品一区二区三区| 欧美另类xxx| 欧美精品久久一区二区| 亚洲一区二区三区xxx视频| 久久夜色精品亚洲噜噜国产mv| 97成人精品区在线播放| 国产视频亚洲视频| 日韩精品在线电影| 日韩大片在线观看视频| 欧美另类高清videos| 亚洲人免费视频| 欧美一级淫片播放口| 91久久中文字幕| 国产亚洲精品久久久久久| 97**国产露脸精品国产| 欧美日在线观看| 精品国偷自产在线视频| 国产精品丝袜高跟| 国产精品视频一区二区高潮| 久久露脸国产精品| 欧美精品免费在线| 岛国av在线不卡| 中文一区二区视频| 亚洲女人被黑人巨大进入| 亚洲黄一区二区| 久久久久久尹人网香蕉| 在线播放亚洲激情| 色偷偷88888欧美精品久久久| 久久久久久国产精品美女| 中文字幕欧美专区| 中文字幕日韩av| 欧美黄色片在线观看| 美女av一区二区| 69av在线播放| 欧美成人一区在线| 精品国产自在精品国产浪潮| 91精品视频免费| 97久久超碰福利国产精品…| 欧美成人激情视频| 91av在线免费观看视频| 成人久久久久久久| 2019亚洲日韩新视频| 欧美高清视频免费观看| 国产免费一区视频观看免费| 国产精品久久久久久久久久新婚| 欧亚精品中文字幕| 日本最新高清不卡中文字幕| 日韩在线观看精品| 欧美色另类天堂2015| 欧美精品久久一区二区| 国外视频精品毛片| 亚洲第一国产精品| 成人av在线网址| 国产精品999999| 91黄色8090| 精品国产自在精品国产浪潮| 欧美床上激情在线观看| 欧美精品videosex牲欧美| 亚洲自拍小视频免费观看| 国产91精品网站| 美日韩丰满少妇在线观看| 亚洲欧美日本另类| 国产亚洲精品久久久优势| 欧美肥老太性生活视频| 日韩欧美在线免费观看| 国产日韩欧美一二三区| 日韩在线不卡视频| 2018中文字幕一区二区三区| 久久99精品久久久久久青青91| 亚洲国模精品一区| 中文国产成人精品久久一| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产免费一区视频观看免费| 日韩精品中文字幕久久臀| 国产成人精品一区| 欧美专区福利在线| 日韩性xxxx爱| 日韩欧美精品免费在线| 日韩av网址在线观看| 5252色成人免费视频| 91夜夜未满十八勿入爽爽影院|