Исключение при подключении Thrift 0.8, Cassandra 1.0.8 и C#

Я создал клиент для Cassandra 1.0.8, используя Thrift 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. Что-то не так, что я делаю? Клиент работает только с определенными версиями? Кто-нибудь успешно подключился к последней версии Cassandra с помощью Thrift и C#?


person unj2    schedule 02.04.2012    source источник
comment
Вам действительно следует использовать библиотеку более высокого уровня, чем использовать бережливость напрямую. Я бы посоветовал вам взглянуть на code.google.com/p/cassandra-sharp   -  person psanford    schedule 02.04.2012


Ответы (2)


Cassandra строит свои бережливые привязки, используя thrift 0.7, что почти наверняка является вашей проблемой. Если вы хотите создать свои собственные бережливые крепления, вам следует использовать эту версию бережливости.

Как упомянул Псанфорд, вам, скорее всего, следует использовать клиент более высокого уровня. Видеть:

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

person nickmbailey    schedule 02.04.2012

Проблема связана с transport.Open() Следующие работы,

    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(); а не транспорт.open()

person Padmika    schedule 03.08.2014