我有一段代码从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());
}
有没有人遇到过类似的问题?
答案 0 :(得分:2)
仅供参考,这已在即将发布的版本中得到修复:https://github.com/dotnet/corefx/issues/28097#event-1536476277
感谢.NET Framework团队处理此问题!