C#使用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;[来源 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