Upload page content

You can upload content for the page named below. If you change the page name, you can also upload content for another page. If the page name is empty, we derive the page name from the file name.

File to load page content from
Page name
Comment

Locked History Actions

thrift/CS

C#用ライブラリ

Thrift.dllの作成

thriftはバイナリディストリビューションが無いため、ソースからライブラリをビルドする必要がある。 以下ではthrift-0.8.0(2012/8最新版)を、Microsoft Visual C# 2010 Express(無料版)でコンパイル・利用する例。

  • http://thrift.apache.org/からtar.gzを取得して展開。thrift-0.8.0というフォルダが作成されたものとする。このフォルダ以下にread only属性がついていたらすべてはずすこと。

  • Visual C#の「プロジェクトを開く」で、thrift-0.8.0\lib\csharp\src\Thrift.csprojを指定する(Thrift.slnは開けないので注意)。
  • 変換ウィザードが起動するので、バックアップ不要で完了。変換ログを表示させると、Thrift.csprojのみが変換され、他は変換無し。
  • プロジェクトプロパティで対象フレームワークを指定する。
  • ソリューションエクスプローラーからプロジェクトをビルドする。slnファイルを保存しろと言われるので、そのまま上書き保存。
  • thrift-0.8.0\lib\csharp\src\bin\Releaseにthrift.dllが作成されている。

Thrift.dllのテスト

ここでは既にthriftのIDL定義から、C#クライアントコードが生成されているものとする。これをコンソールアプリケーションから呼び出してみる。

  • Visual C#の「新しいプロジェクト」で「コンソールアプリケーション」を選択。
  • 参照設定の「参照の追加」で先のThrift.dllを指定。右クリックしてオブジェクトブラウザーで表示させると、Thriftgが追加されている。
  • デフォルトで作成されているProgram.csに「using Thrift;」を追加してビルドすると、「型または名前空間名'Thrift'が見つかりませんでした」というエラー。オブジェクトブラウザーからも消える。

プロジェクトのターゲットを「.NET Framework 4 Client Profile」から「.NET Framework 4」に変更する。以下を参考

この状態でビルドするとエラーは消える。

C#クライアントのテスト

この状態で、thrift-IDLから生成されたC#クライアントをソースツリーに追加する。ビルドするとエラー無しで実行可能。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Thrift;
using Thrift.Transport;
using Thrift.Protocol;
using sample; // サービスのnamespace

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            TTransport transport = new TSocket("localhost", 9090);
            TProtocol protocol = new TBinaryProtocol(transport);
            Interface.Client client = new Interface.Client(protocol); // サービス
            transport.Open();
            string s = client.getSomething(); // サービスメソッドの呼び出し
            System.Console.WriteLine(s);
            System.Console.ReadLine();
        }
    }
}