2012-04-02 5 views
1

Ich generierte den Client für Cassandra 1.0.8 mit Thrift 0.8. Ich habe dann folgendes Beispiel ausprobiert. Die transport.open() übergibt, aber ich kann describe_keyspace oder set_keyspace nichtAusnahme beim Verbinden Thrift 0.8, Cassandra 1.0.8 und C#

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 

Dies ist die Ausnahme, dass ich

An unhandled exception of type 'Thrift.Transport.TTransportException' occurred in Thrift.dll 

Additional information: Cannot read, Remote side has closed 

komme ich zum Schlüsselraum verbinden kann die CLI verwenden. Ist etwas falsch, dass ich mache? Arbeitet der Client nur mit bestimmten Versionen? Hat jemand erfolgreich mit Cassandra mit Thrift und C# verbunden?

+3

Sie sollten wirklich höhere Bibliothek verwenden, als mit Sparsamkeit direkt. Ich schlage vor, dass Sie sich http://code.google.com/p/cassandra-sharp/ ansehen. – psanford

Antwort

2

Cassandra baut seine Sparsamkeitsbindungen mit Sparsamkeit 0,7, die mit ziemlicher Sicherheit Ihr Problem ist. Wenn Sie Ihre eigenen Sparsamkeitsbindungen aufbauen möchten, sollten Sie diese Version von Sparsamkeit verwenden.

Wie psanford erwähnt, sollten Sie höchstwahrscheinlich einen höheren Client verwenden. Siehe:

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

1

Das Problem mit transport.Open ist() Die folgenden Werke,

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(); 

Verwendung cassandraClient.InputProtocol.Transport.Open(); eher als transport.open()

Verwandte Themen