当前位置: 代码迷 >> 综合 >> 【thrift学习】(一) Ubuntu下开发 C#(dotnet)
  详细解决方案

【thrift学习】(一) Ubuntu下开发 C#(dotnet)

热度:27   发布时间:2023-10-21 01:32:26.0

1-部署dotnet

首先安装dotnet,这个有版本要求。对于最新的0.16.0或者最新的发行版0.14.2,最低需要dotnet-sdk-3.1,也即.netcore 3.1.

我们这里安装5.0

sudo apt install dotnet-sdk-5.0

此外还需要包管理器

sudo apt install nuget

微软开发工具的各种管理设置都是通过nuget进行的。

2-安装thrift文件转换器

sudo apt install thrift-compiler

编写好 .thrift 文件后,通过命令转化为C#文件

如果你是使用新的版本,比如0.14.2,应该转化为netstd,如果是比较旧的,如0.10.0,应该转化为csharp:

thrift -gen netstd <.thrift文件>

 或

thrift -gen csharp <.thrift文件>

3-部署thrift环境

3.1-thrift 命令行部署

1.通过nuget查找dotnet

nuget list thrift

这个列出微软方面实现编译好的各类与thrift有关的库,我们可以看到开头有个:

Thrift.NetStd 0.14.2

这个就是我们要的,然后新建工程:

dotnet new console

添加包:

dotnet add package Thrift.NetStd

他就自动添加了上面那个 Thrift.NetStd 0.14.2 。然后我们可以看到工程文件 .csproj 里面多了几行:

  <ItemGroup><PackageReference Include="Thrift.NetStd" Version="0.14.2" /></ItemGroup>

thrift 所有东西都添加进来了。

3.2-源码方式部署

上gitee或者github找到thrift。

git clone下来,切换到release分支:

git branch -a

查看所有分支

git checkout -f <分支名>

需要-f强制切换到其他分支,可以选择0.14.2或者0.10.0.

工程文件 .csproj 里面手动添加:

<ItemGroup><ProjectReference Include="<你源码的根目录>/lib/netstd/Thrift/Thrift.csproj"/>
</ItemGroup>

4-编写简单的客户端,0.14.2+netstd为例

1-把第二步生成的 gen-netstd 整个拷贝进工程,这时候就算是全部加入工程了,不需要其他配置,如果不放心可以加这行:

  <ItemGroup><Folder Include="thriftsrcs\" /></ItemGroup>

2-相比于0.10.0,0.14.2有很大改动,很多API都不一样了。

首先添加名字空间:


using Thrift;
using Thrift.Protocol;
using Thrift.Transport;
using Thrift.Transport.Client;

.thrift生成的文件没有名字空间,不需要添加。

3-main函数

            try{Console.WriteLine("Hello World!");TConfiguration Configuration = null; TTransport transport = new TSocketTransport(IPAddress.Loopback, 9090, Configuration);TBinaryProtocol protocol = new TBinaryProtocol(transport);ExcLcinfoServicc.Client client = new ExcLcinfoServicc.Client(protocol);using (var source = new CancellationTokenSource()){CancellationToken cancellationToken = source.Token;transport.OpenAsync(cancellationToken);}while(!transport.IsOpen){;}try{global::System.Threading.Tasks.Task<ExcLcinfoAll> a = client.getExcLi("dds");\}finally{transport.Close();}}catch (TApplicationException x){Console.WriteLine(x.StackTrace);}

5-0.10.0的main函数

            try{Console.WriteLine("Hello World!");//TTransport transport = new TSocket("localhost", 9090);TTransport transport = new TSocket("192.168.43.233", 9090);TProtocol protocol = new TBinaryProtocol(transport);ExcLcinfoServicc.Client client = new ExcLcinfoServicc.Client(protocol);transport.Open();try{ExcLcinfoAll a = client.getExcLi("dds");Console.WriteLine(a.ToString());}finally{transport.Close();}}catch (TApplicationException x){Console.WriteLine(x.StackTrace);}

包括TSocket和传入参数都有较大改动,另外0.10.0没有 using Thrift.Transport.Client;

取而代之的:

using Thrift.Transport.Server;

6-运行

dotnet run