1、下载

去官网 https://thrift.apache.org/download 下载两个文件,下载地址 http://archive.apache.org/dist/thrift/0.9.3/

  • thrift-0.9.3.exe

用于将 .thrift 文件编译成其他语言文件(如 .cs, .cpp 等)。

 
  • thrift-0.9.3.tar.gz

源代码,用于生成不同语言的 thrift 库文件。

2、Thrift-0.9.3.exe配置

  • 新建thrift文件夹,将下载的thrift-0.9.3.exe重新命名为thrift.exe后放到thtift文件夹下,配置环境变量
  • 打开cmd,输入thrift -version

3、thrift.dll编译

将 thrift-0.9.3.tar.gz 解压,进入 lib/csharp/src 文件夹,使用 Visual Studio 打开 Thrift.sln 文件,编译。完成后可在 bin/Debug 中找到 Thrift.dll 文件,就是我们每次使用 Thrift 必须加载的库文件。(提示:编译时可能会弹框提示需要 .net  framework 3.5 的库,按照提示链接去官网 https://www.microsoft.com/en-us/download/details.aspx?id=22 下载安装即可)

4、编写 Thrift 脚本

假设服务端(Server)为客户端(Client)提供简单的数学运算功能。编写 demo.thrift 脚本如下:

namespace csharp MathClient
namespace csharp MathServer service MathService{
i32 add (1:i32 a, 2:i32 b),
i32 sub (1:i32 a, 2:i32 b),
i32 mul (1:i32 a, 2:i32 b),
i32 div (1:i32 a, 2:i32 b),
i32 mod (1:i32 a, 2:i32 b)
}

  从控制台进入 demo.thrift 的目录后,编译该文件为 C# 代码:

随后会生成一个 gen-csharp 的文件夹,其中包括 MathService.cs 文件,该文件需要同时导入到 Server 和 Client 的程序中,下面将详细说明。

如果是两种语言,如 Java 和 C# 通信的话,需要 –gen csharp 和 –gen java 分别编译一次,将得到的 .cs 和 .class 文件分别导入到两个项目中。

5、Server 程序

在 Visual Studio 中新建 C# Console Application 程序:ThriftServer。将 Thrift.dll. 导入到 Reference 中,同时将之前生成的 MathService.cs 导入项目中,并在 Program.cs 中包含:

using Thrift.Server;
using Thrift.Transport;

新建一个类 MathServer.cs (注意不是 MathService.cs),实现 MathService.Iface 接口:

public class MathServer : MathService.Iface
{
public MathServer() { }
public int add(int a, int b)
{
Console.WriteLine("Called add({0},{1})={2}", a, b, a + b);
return a + b;
}
public int sub(int a, int b)
{
Console.WriteLine("Called sub({0},{1})={2}", a, b, a - b);
return a + b;
}
public int mul(int a, int b)
{
Console.WriteLine("Called mul({0},{1})={2}", a, b, a * b);
return a + b;
}
public int div(int a, int b)
{
Console.WriteLine("Called div({0},{1})={2}", a, b, a / b);
return a / b;
}
public int mod(int a, int b)
{
Console.WriteLine("Called mod({0},{1})={2}", a, b, a % b);
return a % b;
}
}

然后修改 Program.cs 中的 Main 函数为:

static void Main(string[] args)
{
try
{
MathServer handler = new MathServer();
MathService.Processor processor = new MathService.Processor(handler);
TServerTransport serverTransport = new TServerSocket();
TServer server = new TSimpleServer(processor, serverTransport);
Console.WriteLine("Starting the server...");
server.Serve();
}
catch (Exception x)
{
Console.WriteLine(x.StackTrace);
}
Console.WriteLine("done.");
}

这样 ThriftServer 项目就可以运行了。它开启 9095 端口(可以自设),然后等待 Client 与其通信。

6、Client 端

同样新建一个C#控制台项目:ThriftClient,并将 Thrift.dll 和 MathService.cs 导入到项目中,在Program.cs 中包含:

using Thrift.Transport;
using Thrift.Protocol;

修改 Program.cs 中的 Main 函数如下:

static void Main(string[] args)
{
TTransport transport = new TSocket("localhost", );
transport.Open(); TProtocol protocal = new TBinaryProtocol(transport);
MathService.Client client = new MathService.Client(protocal); Console.WriteLine(client.add(, ));
Console.WriteLine(client.sub(, ));
Console.WriteLine(client.mul(, ));
Console.WriteLine(client.div(, ));
Console.WriteLine(client.mod(, ));
}

7、运行

首先运行 MathServer,可以看到:

然后运行 MathClient,可以看到:

同时 MathServer 的控制台显示:

参考:Apache Thrift 配置与简单实例——C# C/S 通信

最新文章

  1. linux常用命令-文件搜索命令-locate,which,whereis,grep
  2. [转帖]The Lambda Calculus for Absolute Dummies (like myself)
  3. 关于MFC文本框输入内容的获取 与 设置文本框的内容
  4. 网页中三角切边还半透明,现在的设计师越来越牛,css也要跟上啊
  5. [Android] adb.exe换了位置
  6. [.NET] 使用C#开发SQL Function来提供数据 - 天气预报
  7. 毕向东Java基础:day09_3-4
  8. Spring(一)简述(转载)
  9. Angular.js中的$injector服务
  10. EBS Workfow常用表
  11. Permutation Sequence 解答
  12. Java程序在向mysql中插入数据的时候出现乱码
  13. VIJOS 1512SuperBrother打鼹鼠(二维BIT)
  14. JS-鼠标滚轮事件 和 阻止默认行为
  15. DDD实战进阶第一波(七):开发一般业务的大健康行业直销系统(实现产品上下文接口与测试)
  16. Linux常见问题汇总
  17. springMVC整理05--数据校验、格式化 & 其他注解 & 数据绑定流程
  18. Linux中搭建一个ftp服务器详解
  19. liunx jdk安装
  20. plsql 连接oracle数据库的2种方式

热门文章

  1. 微信小程序的登入与授权
  2. PAT(B) 1085 PAT单位排行(Java:20分)
  3. Jmeter 接口测试之MD5加密函数(函数助手篇)
  4. 使用QMetaObject获取类的属性
  5. Java 二叉搜索树 实现和学习
  6. Cookie中的HttpOnly
  7. 10 查询字符串,X字段必须包含(不包含)XX;_all原理
  8. 如何通过webpack和node来实现多个静态页面html,多个入口,能打包能热加载开发环境调试
  9. c#使用正则表达式处理字符串
  10. iPad所有平板型号屏幕尺寸