2015-08-26 35 views
0

我想在.net中使用原-BUF C#庫。我正在使用ApiController和System.Net.WebSockets命名空間。它有一種獲取傳入消息的方式。發送協議在.net ApiController緩衝對象protobuf.js

ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[1024]); 
WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, CancellationToken.None); 

我需要一個流來使用protobuf。我不確定如何使用這個名稱空間獲得一個,因爲它使用的是ArraySegment。
我能夠發送一個proto-buf對象來解碼/ protobuf.js,但現在已經在js客戶端上構建了一個對象併發送給服務器。

例CUST = Serializer.DeserializeWithLengthPrefix(結果,PrefixStyle.Base128);

+0

目前尚不清楚該問題是否是* *發送回客戶端(根據你的頭銜)或* *接收來自客戶端(按照體)。請澄清。 –

回答

1

如果你只需要一個Stream從反序列化,你可以使用:

var stream = new MemoryStream(buffer.Array, buffer.Offset, result.Count); 

ArraySegment<byte>已經包裝一byte[],所以你只需要創建一個MemoryStream包裝相同的字節數組,右偏移和長度。

+0

我怎麼知道有多大的ArraySegment ArraySegment buffer = new ArraySegment (new byte [1024]);我創建了一個全新的項目,我的示例可以清除很多東西,現在我得到「源數據中的無效字段:0」 – matthewbaskey

+0

@magister:對我來說這聽起來像一個不同的問題 - 而且我們沒有足夠的實力信息讓你知道。 (我對網絡套接字知之甚少,無法知道它們是否需要視爲流,或者它們是否已經以消息爲導向。) –

+0

是的,我恢復到了protobuf-net 2.0.0.480,因爲我的新項目已經最新來自nuget protobuf-net 2.0.0.668(最新版本)。而對象不會反序列化。我認爲這是關於緩衝區大小或什麼的。 – matthewbaskey