`
daohao123
  • 浏览: 56988 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

C#调用JAVA中HESSIAN

    博客分类:
  • java
阅读更多
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;
   }
  }
  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好多年了,小巧实用,大型的项目我也使用过,非常稳定


再一例子

1.Hello.java
package server;
public interface Hello {
String hello(String name);

}
2 HelloImpl.java

package server.impl;
import server.Hello;
public class HelloImpl implements Hello {
public String hello(String name) {
return "hello, " + name + "! Welcome to use Hessian.";
}
}
3.web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>hessianService</servlet-name>
<servlet-class>
com.caucho.hessian.server.HessianServlet
</servlet-class>
<init-param>
<param-name>service-class</param-name>
<param-value>server.impl.HelloImpl</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>hessianService</servlet-name>
<url-pattern>/hessianService</url-pattern>
</servlet-mapping>

<!---另一配置方式
<servlet>
    <!-- 配置Servlet名,后面根据该名完成远程服务映射 -->
    <servlet-name>hessianService</servlet-name>
     <!-- Hessian远程服务需要HessianServlet暴露 -->
     <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
     <!--  使用init-param配置服务的实现类 -->
     <init-param>
         <param-name>home-class</param-name>           
            <param-value>
                server.Hello
            </param-value>
     </init-param>
     <init-param>
         <param-name>home-api</param-name>
         <param-value>server.impl.HelloImp</param-value>
     </init-param>
     <!-- 随应用启动而启动 -->
     <load-on-startup>1</load-on-startup>
</servlet>
......
<!-- 映射Servlet的url,该Servlet的url就是Hessian服务名 -->
    <servlet-mapping>
     <servlet-name>hessianService</servlet-name>
     <url-pattern>/hessianService</url-pattern>
</servlet-mapping>
---->


</web-app>

4。远程调用RometoTest.java
package client;
import java.net.MalformedURLException;
import server.Hello;
import com.caucho.hessian.client.HessianProxyFactory;
public class RomoteTest {
public static void main(String[] args) {
String url = "http://localhost:8080/hessianService";
HessianProxyFactory factory = new HessianProxyFactory();
try {
Hello hello = (Hello) factory.create(Hello.class, url);
System.out.println(hello.hello("kingtoon"));
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
分享到:
评论

相关推荐

    C#调用JAVA案例

    本案例主要关注的是"C#调用JAVA"的实现,即如何让C#客户端能够与Java服务器进行交互。HessianTest是一个具体的示例,它展示了如何利用Hessian协议来完成这种通信。下面将详细介绍这个过程及其相关知识点。 Hessian...

    Java和c#使用hessian通信

    一个简单的例子学习hessian服务:服务端为Java,客户端为C#。  先要准备好C#和Java的第三方类库:http://hessian.caucho.com/  Hssiancharp.dll  hessian-4.0.37.jar  Hessian服务端(java)  打开eclipse...

    hessian java +c# 数据测试

    至于"List"和"Map",它们在Hessian中也有特别的处理方式。Hessian可以序列化和反序列化List和Map类型的集合,无论是基本类型还是自定义对象的集合。在Java端,`List`和`Map`会被转换成Hessian的特定格式,而在C#端,...

    HessianCSharp_Test.rar_Hessian java

    描述中提到的“.Net使用Hessian调用JAVA的函数”,意味着这个压缩包可能包含了C#代码,这些代码实现了通过Hessian协议调用Java服务端的方法。这通常涉及到序列化和反序列化对象,以及处理跨语言的接口调用。 在标签...

    用hessian c#桌面程序调用J2EE后台服务

    4. **集成Hessian库**:在C#项目中,需要引入Hessian的.NET实现库,如`HessianSharp`或`Hessian.NET`,这些库提供了对Hessian协议的支持,使得C#客户端可以调用Java服务。 5. **服务调用过程**: - 客户端(C#)...

    Hessian 使用小结

    Hessian的设计目标是为了提供高效、简单的远程调用方式,使得客户端能够像调用本地方法一样调用远程服务。 **独立使用Hessian** 在不依赖任何框架的情况下,使用Hessian的步骤如下: 1. **添加依赖**:首先,...

    hessian服务端 客户端 可运行

    在Java中,Hessian服务端通常由一个实现了特定接口的类构成,这个接口定义了可供客户端调用的方法。服务端通过Servlet容器(如Tomcat)部署,使用HessianServlet来处理HTTP请求。HessianServlet将接收到的二进制数据...

    hessian

    4. **跨语言支持**:虽然最初是为Java设计的,但Hessian也有其他语言的实现,比如Python、C++、C#等,因此可以在多种语言之间进行通信。 在【描述】中提到的博客链接,可能详细介绍了如何使用Hessian进行客户端和...

    Hessian的学习笔记

    * 跨语言支持:Hessian支持多种编程语言,例如Java、Python、C#等。 * 可扩展性:Hessian具有高可扩展性,易于集成到现有的应用程序中。 五、Hessian的应用场景 Hessian可以应用于以下场景: * 远程过程调用(RPC...

    Hessian-4.0.7.jar和Hessiancsharp.dll(一个zip)

    总的来说,Hessian-4.0.7.jar和Hessiancsharp.dll是构建Java和C#之间高效、轻量级远程服务调用的关键组件,它们简化了跨语言通信的复杂性,提升了网络通信的性能。掌握好Hessian的使用,能为我们的分布式系统设计...

    spring+hessian+maven整合.zip

    【标题】:“Spring + Hessian + Maven 整合”是一个基于Java的分布式服务开发实践,它结合了Spring框架的强大功能,Hessian的轻量级RPC(远程过程调用)协议,以及Maven作为项目构建和依赖管理工具。这个压缩包包含...

    Hessian

    5. **跨语言支持**:尽管Hessian最初是为Java设计的,但它也有C++, C#, Python等其他语言的实现,支持跨平台通信。 ### Hessian的工作原理: Hessian服务通常由两部分组成:服务端(Server)和客户端(Client)。...

    用Hessian协议实现Android手机与J2EE系统集成的研究.pdf

    Hessian协议支持多种编程语言,如Java、C、C++、C#、.NET、Flash、PHP等,并提供相应的API支持包,便于开发者集成到各自的应用环境中。Hessian协议的特点包括:无需额外模式或接口定义的可序列化类型、自描述性、...

    不同于webservice的移动开发

    在C#中,开发者可以使用Hessian库来创建客户端和服务端,实现快速、轻量级的服务调用。 在移动开发中,Hessian可以用来: 1. **服务端接口暴露**:开发者可以将服务端业务逻辑封装成Hessian服务,然后在移动客户端...

    hessain架包

    Hessian是一种轻量级的RPC(远程过程调用)协议,它主要用于分布式系统中的服务调用,使得客户端能够像调用本地方法一样调用远程服务器上的服务。在IT行业中,Hessian因其简单、高效和跨语言特性而被广泛应用。本文...

    memcached安装和使用详细说明

    Memcached的客户端库支持多种编程语言,如PHP、C#和Java。对于Java开发者,有两个常用的客户端库: 1. **java_memcached-release_2.6.3** - 依赖的JAR包:`commons-pool-1.5.6.jar`, `java_memcached-release_...

Global site tag (gtag.js) - Google Analytics