连接Thrift 0.8、Cassandra 1.0.8和C#时出现异常

本文关键字:异常 Thrift Cassandra 连接 | 更新日期: 2023-09-27 18:29:50

我使用Thrift 0.8为Cassandra 1.0.8生成了客户端。然后我尝试了下面的例子。transport.open()通过了,但我无法描述_keyspace或set_keyspace

TTransport transport = new TBufferedTransport(new TSocket("localhost", 9160));
            TProtocol protocol = new TBinaryProtocol(transport);
            Cassandra.Client client = new Cassandra.Client(protocol);
            Console.WriteLine("Opening connection");
            try
                {
                 transport.Open(); 
                }
            catch (Exception e)
                {
                Console.WriteLine("error connecting...");
                return;
                }
            KsDef def = client.describe_keyspace("nm_example"); // error here
            client.set_keyspace("nm_example");// error here   

这是我得到的例外

An unhandled exception of type 'Thrift.Transport.TTransportException' occurred in Thrift.dll
Additional information: Cannot read, Remote side has closed

我可以使用CLI连接到密钥空间。我做错什么了吗?客户端是否只适用于某些版本?有人使用Thrift和C#成功连接到最新的Cassandra吗?

连接Thrift 0.8、Cassandra 1.0.8和C#时出现异常

Cassandra使用节俭0.7构建它的节俭绑定,这几乎肯定是你的问题。如果你想建立自己的节俭绑定,你应该使用那个版本的节俭。

正如psanford所提到的,您很可能应该使用更高级别的客户端。参见:

http://wiki.apache.org/cassandra/ClientOptions

问题在于传输。打开()以下工作,

    TSocket socket = null;
    TTransport transport = null;
    socket = new TSocket("localhost", 9160);

    transport = new TFramedTransport(socket);
    TProtocol protocol = new TBinaryProtocol(transport);
    CassandraClient cassandraClient = new CassandraClient(protocol);
    cassandraClient.InputProtocol.Transport.Open();
    string s = cassandraClient.describe_cluster_name();
    List<KsDef> keyspaces = cassandraClient.describe_keyspaces();

使用cassandraClient.InputProtocol.Transport.Open();而不是transport.open()