.NET Core 2.0中的Websockets - 以块的形式接收消息

时间:2018-03-15 12:19:42

标签: .net websocket .net-core

我有一段代码从websocket接收消息。它在.NET 4.6.1中正常工作,但在.NET Core 2.0中不能正常工作。

如果消息小于缓冲区大小,则在.NET Core版本中一切正常。如果它更大, WebSocketConnection.ReceiveAsync 会继续读取512字节的块,而 messageReceiveResult.EndOfMessage 永远不会设置为 true 。< / p>

为了测试目的,缓冲区的大小设置为这个小值。

除了将缓冲区大小设置为任意大值之外,您认为还有其他选择吗?

以下是代码:

while (WebSocketConnection.State == System.Net.WebSockets.WebSocketState.Open)
{
var compoundBuffer = new List<byte>();
var messageReceiveResult = new WebSocketReceiveResult(0, WebSocketMessageType.Close, false);
byte[] buffer = new byte[512];

while (!messageReceiveResult.EndOfMessage)
{
    // read one message until the end
    messageReceiveResult = await WebSocketConnection.ReceiveAsync(new ArraySegment<byte>(buffer), cancellationToken);

    if (messageReceiveResult.MessageType == WebSocketMessageType.Text)
    {
        byte[] readBytes = new byte[messageReceiveResult.Count];
        Array.Copy(buffer, readBytes, messageReceiveResult.Count);
        compoundBuffer.AddRange(readBytes);
    }
}
// get string message
string message = Encoding.UTF8.GetString(compoundBuffer.ToArray());

}

有没有人遇到过类似的问题?

1 个答案:

答案 0 :(得分:2)

仅供参考,这已在即将发布的版本中得到修复:https://github.com/dotnet/corefx/issues/28097#event-1536476277

感谢.NET Framework团队处理此问题!