NetCore下使用RPC框架Hprose

https://www.jianshu.com/p/c903fca44d5d

Hprose是国内非常优秀的RPC框架,和其它RPC框架比较起来,其它框架一般需要定义一个接口文件,通过工具把接口文件转化成服务端和客户端对应的代码(可以跨语言),客户端和服务端把这些生成的代码集成到自己的项目里,一旦接口发生变化,需要重新执行这个操作。

Hprose进一步简化,无需这个步骤,直接服务端生成函数给客户端使用。另外Hprose支持的语言非常多,一直在更新中。

我们前期不少项目都在使用Hprose,一般用在替代http的web api上,开发效率比直接使用restful接口高很多,近期后台从.Net转.NetCore碰到一点小问题,简单总结一下。

Nuget上下载的hprose-dotnet最新版本是1.5.7,和原作者交流才知道1.5.8才是支持NetCore的版本,1.5.8下载地址是https://github.com/hprose/hprose-dotnet/releases/tag/v1.5.8 .原作者正在准备最新的3.0版本了。

下载测试后发现同样的代码在.Net下没有问题,在NetCore下还是有一个nullpointer错误,把Hprose的源码加入调试发现一个小问题,直接修改并重新生成了一个hprose.client.dll,大家可以在我的Github上下载。

最后在放一个简单的例子,算是给没接触过Hprose的同学一个直观的感受。例子包括用NetCore实现的client和server,下载地址都在Github

  • server端
    class TestService
{
public string Hello(string name)
{
return "Hello " + name + "!";
}
}
class Program
{
static void Main(string[] args)
{
HproseHttpListenerServer server = new HproseHttpListenerServer("http://localhost:2012/");
TestService ts = new TestService();
server.Add("Hello", ts);
server.IsCrossDomainEnabled = true;
//server.CrossDomainXmlFile = "crossdomain.xml";
server.Start();
Console.WriteLine("Server started.");
Console.ReadLine();
Console.WriteLine("Server stopped.");
}
}
  • client端

static void Main(string[] args)
{
HproseHttpClient client = new HproseHttpClient(" http://localhost:2012/");
client.KeepAlive = true;
Console.WriteLine(client.Invoke("Hello",new Object[]{"bbbb"}));
Console.WriteLine(client.Invoke("hello",new Object[]{"cccc"}));
Console.ReadLine();
}

AppWorker官方马上也会推出do_Hprose组件来支持在Android和iOS下通过hprose和服务端通信。

作者:voxer
链接:https://www.jianshu.com/p/c903fca44d5d
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

最新文章

  1. 【XLL 框架库函数】 TempActiveColumn/TempActiveColumn12
  2. Lua模块
  3. Blog 公用部分结构与class定义
  4. JMS
  5. android接入微信分享(朋友、朋友圈)、QQ分享(好友、空间)
  6. IT教程网
  7. EF提供的三种查询方式
  8. 【Linux高频命令专题(16)】less
  9. JavaWeb项目开发案例精粹-第2章投票系统-002配置文件及公共类
  10. TestNG中的DataProvider返回Iterator<Object[]>的妙用
  11. ios使用xcode进行Archive打包上传出现的常见错误
  12. 标准Http协议的六种请求方法详解
  13. unity5.6 导出gradle工程,Android Studio 导入问题以及解决
  14. 再谈spring的循环依赖是怎么造成的?
  15. Memcached部署和用法
  16. uniGUI试用笔记(三)
  17. mime模块响应或设置Node.js的Content-Type头
  18. cJSON精度丢失问题
  19. vue.js - 2
  20. oracle kill 锁

热门文章

  1. css 解决fixed 布局下不能滚动的问题
  2. memory prefix out omni,over,out,od,octa ~O
  3. 转Generative Model 与 Discriminative Model
  4. CAD(布置厨洁具)(尺寸标注)5.12
  5. Win10系列:VC++绘制几何图形2
  6. oracle日志相关的表
  7. JS时间戳和时间之间转换
  8. log4j 输出原始数据到指定日志文件
  9. RTTI,C++类型转换操作符
  10. 房间安排 (nyoj 168)