Исключение при подключении Thrift 0.8, Cassandra 1.0.8 и C # - PullRequest
1 голос
/ 02 апреля 2012

Я сгенерировал клиента для 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 #?

Ответы [ 2 ]

2 голосов
/ 03 апреля 2012

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

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

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

1 голос
/ 03 августа 2014

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

...