Thrift.transport.ttransportException : Null OutputStream에 쓸 수 없습니다

StackOverflow https://stackoverflow.com/questions/2411127

  •  18-09-2019
  •  | 
  •  

문제

저는 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 ()을 호출해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top