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