博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
windows下C#通过Thrift操作HBase
阅读量:5251 次
发布时间:2019-06-14

本文共 5650 字,大约阅读时间需要 18 分钟。

1。到apache官网下载Thrift源码, http://thrift.apache.org/download,我这里下载的是thrift-0.10.0

2。到apach官网下载thrift.exe, http://thrift.apache.org/download, 这里下载的是thrift-0.10.0.exe

3。将下载下来的thrift-0.10.0.exe放到thrift-0.10.0/tutorial/目录下去

4。在windows命令行运行如下这两条命令:

  thrift-0.10.0.exe --gen csharp tutorial.thrift

  thrift-0.10.0.exe --gen csharp shared.thrift

运行完以后就会在当前目录下生成一个名为gen-csharp的目录,到时候需要把这下面的源码文件添加到项目中去

 

5。用vs打开thrift-0.10.0/lib/csharp/src/Thrift.sln解决方案,并编译得到Thrift.dll

6。用vs新建自己的项目,将之前生成的源码添加进来,并引入Thrift.dll库。

下面就是Client端的代码

using System;using Thrift;using Thrift.Protocol;using Thrift.Server;using Thrift.Transport;namespace CSharpTutorial{    public class CSharpClient    {        public static void Main()        {            try            {                TTransport transport = new TSocket("localhost", 9090);                TProtocol protocol = new TBinaryProtocol(transport);                Calculator.Client client = new Calculator.Client(protocol);                transport.Open();                try                {                    client.ping();                    Console.WriteLine("ping()");                    int sum = client.add(1, 1);                    Console.WriteLine("1+1={0}", sum);                    Work work = new Work();                    work.Op = Operation.DIVIDE;                    work.Num1 = 1;                    work.Num2 = 0;                    try                    {                        int quotient = client.calculate(1, work);                        Console.WriteLine("Whoa we can divide by 0");                    }                    catch (InvalidOperation io)                    {                        Console.WriteLine("Invalid operation: " + io.Why);                    }                    work.Op = Operation.SUBTRACT;                    work.Num1 = 15;                    work.Num2 = 10;                    try                    {                        int diff = client.calculate(1, work);                        Console.WriteLine("15-10={0}", diff);                    }                    catch (InvalidOperation io)                    {                        Console.WriteLine("Invalid operation: " + io.Why);                    }                    SharedStruct log = client.getStruct(1);                    Console.WriteLine("Check log: {0}", log.Value);                }                finally                {                    transport.Close();                }            }            catch (TApplicationException x)            {                Console.WriteLine(x.StackTrace);            }        }    }}

下面是Server端代码

using System;using System.Collections.Generic;using Thrift.Server;using Thrift.Transport;namespace CSharpTutorial{    public class CalculatorHandler : Calculator.Iface    {        Dictionary
log; public CalculatorHandler() { log = new Dictionary
(); } public void ping() { Console.WriteLine("ping()"); } public int add(int n1, int n2) { Console.WriteLine("add({0},{1})", n1, n2); return n1 + n2; } public int calculate(int logid, Work work) { Console.WriteLine("calculate({0}, [{1},{2},{3}])", logid, work.Op, work.Num1, work.Num2); int val = 0; switch (work.Op) { case Operation.ADD: val = work.Num1 + work.Num2; break; case Operation.SUBTRACT: val = work.Num1 - work.Num2; break; case Operation.MULTIPLY: val = work.Num1 * work.Num2; break; case Operation.DIVIDE: if (work.Num2 == 0) { InvalidOperation io = new InvalidOperation(); io.WhatOp = (int)work.Op; io.Why = "Cannot divide by 0"; throw io; } val = work.Num1 / work.Num2; break; default: { InvalidOperation io = new InvalidOperation(); io.WhatOp = (int)work.Op; io.Why = "Unknown operation"; throw io; } } SharedStruct entry = new SharedStruct(); entry.Key = logid; entry.Value = val.ToString(); log[logid] = entry; return val; } public SharedStruct getStruct(int key) { Console.WriteLine("getStruct({0})", key); return log[key]; } public void zip() { Console.WriteLine("zip()"); } } public class CSharpServer { public static void Main() { try { CalculatorHandler handler = new CalculatorHandler(); Calculator.Processor processor = new Calculator.Processor(handler); TServerTransport serverTransport = new TServerSocket(9090); TServer server = new TSimpleServer(processor, serverTransport); // Use this for a multithreaded server // server = new TThreadPoolServer(processor, serverTransport); Console.WriteLine("Starting the server..."); server.Serve(); } catch (Exception x) { Console.WriteLine(x.StackTrace); } Console.WriteLine("done."); } }}

 

转载于:https://www.cnblogs.com/smallcroco-blog/p/6836158.html

你可能感兴趣的文章
如何在vue单页应用中使用百度地图
查看>>
P1192-台阶问题
查看>>
一、使用pip安装Python包
查看>>
spring与quartz整合
查看>>
Kattis之旅——Eight Queens
查看>>
3.PHP 教程_PHP 语法
查看>>
Duilib扩展《01》— 双击、右键消息扩展
查看>>
利用Fiddler拦截接口请求并篡改数据
查看>>
python习题:unittest参数化-数据从文件或excel中读取
查看>>
在工程中要加入新的错误弹出方法
查看>>
PS 滤镜— — sparkle 效果
查看>>
网站产品设计
查看>>
代理ARP
查看>>
go 学习笔记(4) ---项目结构
查看>>
java中静态代码块的用法 static用法详解
查看>>
Java线程面试题
查看>>
Paper Reading: Relation Networks for Object Detection
查看>>
day22 01 初识面向对象----简单的人狗大战小游戏
查看>>
mybatis源代码分析:深入了解mybatis延迟加载机制
查看>>
Flask三剑客
查看>>