Thrift.transport.ttransportException : Null OutputStream에 쓸 수 없습니다
문제
저는 Cassandra 및 Thrift Libraries와 함께 일하고 있습니다. 나는 이것들이 매우 초기 라이브러리라는 것을 알고 있으며, 어느 시점에서 (의심 할 여지없이) 변화 할 것입니다.
나는 다음을 사용하고 있습니다 링크 Cassandra 서버 (내 로컬 VirtualBox의 Ubuntu 서버 인스턴스에서 실행 중임)에 쓰고 읽을 C# 코드 설정에 도움이됩니다. 사소한 읽기 / 쓰기 기능이 작동한다는 것을 확인했습니다.
문제가있는 곳은 다음 방법을 실행하는 것입니다 (Cassandra와 함께 제공되는 Thrift.definition 파일을 사용하여 생성되었습니다).
public void send_get_count(string keyspace, string key, ColumnParent column_parent, ConsistencyLevel consistency_level)
내 설정 코드는 다음과 같습니다.
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);
}
내 호출 코드는 다음과 같습니다.
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));
}
}
}
이 방법의 첫 번째 줄은 예외를 얻는 곳입니다.
oprot_.WriteMessageBegin(new TMessage("get_count", TMessageType.Call, seqid_));
그리고 여기 예외가 있습니다.
Thrift.transport.ttransportexception : Thrift.transport.tstreamtransport.write (byte [] buf, int32 off, int32 len)에서 thrift.protocol.tbinaryprotocol.writei32 (int32 i32)에서 null outputstream에 쓸 수 없습니다. apache.cassandra.cassandra.cassandra.cassandra.cassandra.send_get_range_slice의 writemessagebegin (tmessage message). .client.get_range_slice (String Keyspace, cassandra.cs : int32 row_count, cassandra.models.test.cs : getallblogentents ()의 335 행 testTest.cs : line 42에서 cassandradade.tests.testtest.test_getallblogentries_success ()
어떤 아이디어?
해결책
운송에서 Open ()을 호출해야합니다.