C#使用Hessian调用JAVA的函数

分类: J2EE   出处:iocblog整理  更新时间:2008-06-21   添加到收藏  

  hessian其实很像web service,只不过它的协议不是soap,而是它自己规定的binary协议。hessian的server端提供一个servlet基类,client端获得一
  
  个service接口(也就是stub)之后调用上面的方法,stub将方法调用marshal之后通过http传到server,server借助reflection调用service方法。
  
  实战开始,先到www.caucho.com上去下载一个resin,在宝宝的网上也有(itbaby.jss.cn)
  
  然后在itbaby.jss.cn上下载一个hessiancsharp的dll文件,供c#使用
  
  1.开始,在resin解压后,我在web-inf中建立一个目录itbaby,然后按resin的帮助在itbaby目录下写了两个类
  

  plusapi和plusservice
  
  plusapi的code如下:
  
  package itbaby;
  public interface plusapi
  {
  public string plus2str(int a,int b);
  }
  
  plusservice的code如下:
  
  package itbaby;
  public class plusservice implements plusapi
  {
  public string plus2str(int a,int b)
  {
  int isum = a + b;
  string ssum = integer.tostring(isum);
  return ssum;[来源 www.iocblog.net]
  }
  }
  
  2.在web-inf目录下建了个web.xml文件(注意原来的resin带的我都删除了)
  

  内容如下:
  <web-app xmlns="http://caucho.com/ns/resin">
  <servlet servlet-name="plus" servlet-class="com.caucho.hessian.server.hessianservlet">
  <init-param service-class="itbaby.plusservice"/>
  <init-param api-class="itbaby.plusapi"/>
  </servlet>
  <servlet-mapping url-pattern="/itbabywebsvc/plus" servlet-name="plus"/>
  </web-app>
  
  3.写一个jsp的测试文件(test.jsp),看看两个类是否运行正常
  

  <%@ page import="com.caucho.hessian.client.hessianproxyfactory" %>
  <%@ page import="itbaby.plusapi" %>
  <%
  hessianproxyfactory factory = new hessianproxyfactory();
  
  // http://localhost:8080/itbabywebsvc/plus
  string url = ("http://" +
  request.getservername() + ":" + request.getserverport() +
  request.getcontextpath() + "/itbabywebsvc/plus");
  
  plusapi plus = (plusapi) factory.create(plusapi.class, url);
  
  out.println("100 + 50 = " + plus.plus2str(100,50)+"<br>");
  out.println("150 + 200 = " + plus.plus2str(150,200)+"<br>");
  %>
  
  运行结果输出:
  
  100 + 50 = 150
  150 + 200 = 350
  表示两个类运行正常
  
  4.开始写c#的客户端调用,启动vs.net2003,新建一个windows应用程序,当然你也可以使用asp.net,在默认的form1上添加一个button1的按钮.
  

  然后添加一个引用hessiancsharp.dll,(就是让你下载的那个dll)
  
  5.添加一个类文件,命名为:plusapi.cs,code如下:

  using system;
  namespace hsntest
  {
  public interface plusapi
  {
  string plus2str(int a,int b);
  }
  }
  
  在button1的click中添加如下code:
  private void button1_click(object sender, system.eventargs e)
  {
  chessianproxyfactory factory = new chessianproxyfactory();
  string url="http://localhost:8080/itbabywebsvc/plus";
  plusapi test = (plusapi)factory.create(typeof(plusapi), url);
  string svalue = "5 + 10 =" + test.plus2str(5,10);
  messagebox.show(svalue );
  
  }
  
  别忘了应用命名空间
  using hessiancsharp.client;
  
  总结:我们可以考虑这样来使用java的方法,hessian还有 for php,python,c++的类库,有兴趣的朋友可以在caucho.com上多看看,多一句话,宝宝的网站就是用resin,我使用resin好多年了,小巧实用,大型的项目我也使用过,非常稳定
Tag: Hessian