저는 Cassandra 및 Thrift 라이브러리에 대해 몇 가지 작업을하고 있습니다. 나는 이것들이 매우 초기의 도서관임을 깨닫고 (언젠가는) 어떤 점에서 바뀔 것이다.Thrift.Transport.TTransportException : null 출력 스트림에 쓸 수 없습니다.
저는 로컬 VirtualBox의 Ubuntu Server 인스턴스에서 실행중인 Cassandra 서버에서 읽고 쓰는 데 C# 코드를 설정하는 데 도움이되는 다음 link을 사용했습니다. 사소한 읽기/쓰기 기능이 제대로 작동하는지 확인했습니다.
나는 (카산드라와 함께 제공되는 thrift.definition 파일을 사용하여 나를 위해 생성 된) 다음과 같은 방법을 실행하는 데 문제가있어 여기서
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 send_get_count(string keyspace, string key, ColumnParent column_parent, ConsistencyLevel consistency_level)
가 여기 내 설정 코드의를
이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에서 를 OutputStream에 null로 쓸 수 없습니다를 (바이트 [] 버피, INT32 오프 Apache.Cassandra.Cassandra.Client.send_get_range_slice (문자열 키 스페이스, ColumnParent의 column_parent, SlicePredicate에서 Thrift.Protocol.TBinaryProtocol.WriteMessageBegin (TMessage 메시지) 에서 Thrift.Protocol.TBinaryProtocol.WriteI32 (INT32의 I32) 에서 INT32 렌) 술어, 문자열 start_key, 문자열 finish_key, Int32 row_count, ConsistencyLevel consis cassandra.cs의 라인 341 : Cassandra.Cassandra.Cassandra.Client.get_range_slice (String keyspace, ColumnParent column_parent, SlicePredicate 술어, 문자열 start_key, 문자열 finish_key, Int32 row_count, ConsistencyLevel consistency_level) 라인 335 라인 TestTest.cs에 CassandraDemo.Tests.Models.TestTest.Test_GetAllBlogEntries_Success()에서 212 : 라인 42
어떤 아이디어 Test.cs에 CassandraDemo.Models.Test.GetAllBlogEntries()에서?
outputstream과 같은 소리는 null입니다. _client를 어떻게 초기화합니까? – Schildmeijer
@Schildmeijer 설정 코드를 업데이트하겠습니다. 이 코드를 호출하기 전에 읽고 쓸 수 있기 때문에 객체가 확실히 만들어졌습니다. – karlgrz
C#의 Cassandra를 실제로 사용하는 사람들은 실제로 그렇게 생각하지 않습니다. 따라서 여기에서 알아낼 수 없으면 cassandra-user 메일 링리스트에 질문 해보십시오. – jbellis