Ich arbeite mit Cassandra und den Bibliotheken von Thrift. Ich weiß, dass es sehr frühe Bibliotheken sind, die sich (zweifellos) irgendwann ändern werden.Thrift.Transport.TTransportException: Ich kann nicht in null outputstream schreiben
Ich habe die folgenden link für Hilfe bei der Einrichtung meiner C# -Code zum Schreiben und Lesen zu und von meinem Cassandra-Server (die ich in einer Ubuntu Server-Instanz in meiner lokalen VirtualBox ausgeführt habe) verwendet. Ich habe bestätigt, dass die triviale Lese-/Schreibfunktionalität funktioniert.
Wo ich habe ein Problem ist, das folgende Verfahren ausgeführt wird (was für mich generiert wurde die thrift.definition-Datei, die mit Cassandra kam):
public void send_get_count(string keyspace, string key, ColumnParent column_parent, ConsistencyLevel consistency_level)
Hier ist mein Setup-Code:
TTransport _transport;
TProtocol _protocol;
Cassandra.Client _client;
public Test()
{
_transport = new TSocket("192.168.56.101", 9160);
_protocol = new TBinaryProtocol(_transport);
_client = new Cassandra.Client(_protocol);
}
Meine Berufung Code sieht so aus:
public void GetAllBlogEntries()
{
var timestamp = DateTime.Now.Millisecond;
var keyspace = "Keyspace1";
var utf8Encoding = System.Text.Encoding.UTF8;
var columnParent = new ColumnParent() {Column_family = "BlogEntries"};
var predicate = new SlicePredicate()
{
Slice_range = new SliceRange()
{
Start = new byte[0],
Finish = new byte[0],
Count = 10,
Reversed = false
}
};
var results = _client.get_range_slice(keyspace, columnParent, predicate, "", "", 5, ConsistencyLevel.ONE);
foreach(var slice in results)
{
Console.WriteLine("Found Key: {0}", slice.Key);
foreach(var resultColumn in slice.Columns)
{
var column = resultColumn.Column;
Console.WriteLine("\tName: {0}, value: {1}",
utf8Encoding.GetString(column.Name),
utf8Encoding.GetString(column.Value));
}
}
}
Die erste Zeile dieser Methode ist, wo Ich erhalte meine Ausnahme:
oprot_.WriteMessageBegin(new TMessage("get_count", TMessageType.Call, seqid_));
Und hier die Ausnahme:
Thrift.Transport.TTransportException: Kann nicht schreiben auf null Output bei Thrift.Transport.TStreamTransport.Write (Byte [] buf, Int32 off, Int32 LEN) bei Thrift.Protocol.TBinaryProtocol.WriteI32 (Int32 i32) bei Thrift.Protocol.TBinaryProtocol.WriteMessageBegin (TMessage message) bei Apache.Cassandra.Cassandra.Client.send_get_range_slice (String Schlüsselraum, ColumnParent column_parent, SlicePredicate Prädikat, String start_key, String finish_key, Int32 row_count, ConsistencyLevel consist tency_level) in Cassandra.cs: Leitung 341 bei Apache.Cassandra.Cassandra.Client.get_range_slice (String Schlüsselraum, ColumnParent column_parent, SlicePredicate Prädikats, String start_key, String finish_key, Int32 row_count, ConsistencyLevel consistency_level) in Cassandra.cs: Linie 335 bei CassandraDemo.Models.Test.GetAllBlogEntries() in Test.cs: Linie 212 bei CassandraDemo.Tests.Models.TestTest.Test_GetAllBlogEntries_Success() in TestTest.cs: Linie 42
Irgendwelche Ideen?
Klingt wie der Ausgangsstrom ist null. Wie initialisierst du _client? – Schildmeijer
@Schildmeijer Ich werde mit meinem Setup-Code aktualisieren. Das Objekt wird definitiv erstellt, weil ich vor dem Aufruf dieses Codes lesen und schreiben kann. – karlgrz
Ich glaube nicht, dass jemand, der Cassandra aus C# verwendet, tatsächlich auf SO ist. Wenn Sie es hier nicht herausfinden können, fragen Sie auf der cassandra-Benutzer-Mailingliste nach. – jbellis