2010-03-09 23 views
7

Tôi đang làm một số công việc với thư viện Cassandra và Thrift. Tôi nhận ra đây là những thư viện rất sớm và sẽ (chắc chắn) thay đổi tại một số điểm.Thrift.Transport.TTransportException: Không thể ghi vào đầu ra null

Tôi đã sử dụng link sau đây để được trợ giúp thiết lập mã C# để viết và đọc đến và từ máy chủ Cassandra (mà tôi đang chạy trong phiên bản Ubuntu Server trong VirtualBox cục bộ của mình). Tôi đã xác nhận rằng chức năng đọc/ghi tầm thường hoạt động.

đâu Tôi đang gặp một vấn đề đang thực hiện các phương pháp sau đây (được tạo ra cho tôi bằng cách sử dụng tập tin thrift.definition đi kèm với Cassandra):

public void send_get_count(string keyspace, string key, ColumnParent column_parent, ConsistencyLevel consistency_level) 

Đây là mã thiết lập của tôi:

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

mã gọi tôi trông giống như vậy:

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

dòng đầu tiên của phương pháp này là nơi Tôi nhận được ngoại lệ của tôi:

oprot_.WriteMessageBegin(new TMessage("get_count", TMessageType.Call, seqid_)); 

Và đây là ngoại lệ:

Thrift.Transport.TTransportException: Không thể ghi null OutputStream tại Thrift.Transport.TStreamTransport.Write (Byte [] buf, Int32 tắt, Int32 len) tại Thrift.Protocol.TBinaryProtocol.WriteI32 (Int32 i32) tại Thrift.Protocol.TBinaryProtocol.WriteMessageBegin (thông báo TMessage) tại Apache.Cassandra.Cassandra.Client.send_get_range_slice (String keyspace, ColumnParent column_parent, SlicePredicate vị từ, String start_key, String finish_key, Int32 row_count, ConsistencyLevel consis tency_level) trong Cassandra.cs: dòng 341 tại Apache.Cassandra.Cassandra.Client.get_range_slice (String keyspace, ColumnParent column_parent, SlicePredicate predicate, String start_key, String finish_key, Int32 row_count, ConsistencyLevel consistency_level) trong Cassandra.cs: line 335 tại CassandraDemo.Models.Test.GetAllBlogEntries() trong Test.cs: dòng 212 tại CassandraDemo.Tests.Models.TestTest.Test_GetAllBlogEntries_Success() trong TestTest.cs: line 42

Bất kỳ ý tưởng nào?

+0

Âm thanh giống như đầu ra là null. Làm thế nào để bạn khởi tạo _client? – Schildmeijer

+0

@Schildmeijer Tôi sẽ cập nhật mã thiết lập của mình. Đối tượng chắc chắn được tạo ra, bởi vì tôi có thể đọc và viết trước khi gọi mã này. – karlgrz

+1

Tôi không nghĩ rằng bất kỳ người nào thực sự sử dụng Cassandra từ C# thực sự là trên SO, vì vậy nếu bạn không thể làm cho nó được tìm ra ở đây, hãy thử hỏi về danh sách gửi thư của người dùng cassandra. – jbellis

Trả lời

13

Bạn cần gọi Open() khi đang di chuyển.

+0

Đúng rồi! Tôi nghĩ rằng trên tàu về nhà tối qua, nhưng chỉ trở lại làm việc để kiểm tra SO. Cảm ơn bạn đã giúp đỡ! – karlgrz

Các vấn đề liên quan