我有一个使用WebSocket进行通信的Xamarin应用。在客户端方面,我正在引用
ClientWebSocket
。代码:
using (var client = new ClientWebSocket() { Options = { KeepAliveInterval = new TimeSpan(0,0,3,0) }})
{
try
{
await client.ConnectAsync(requestUri, cancellationToken);
do
{
WebSocketReceiveResult result = null;
var buffer = new byte[ReceiveChunkSize];
var message = new ArraySegment<byte>(buffer);
do
{
result = await client.ReceiveAsync(message, cancellationToken);
var receivedMessage = Encoding.UTF8.GetString(buffer, 0, result.Count);
data.Append(receivedMessage);
if (result.MessageType != WebSocketMessageType.Text)
break;
} while (!result.EndOfMessage);
TranslateData(data);
} while (client.State == WebSocketState.Open && !cancellationToken.IsCancellationRequested);
应用程序不断抛出间歇性错误。 System.Net.WebSockets.WebSocketException (0x80004005): The remote
party closed the WebSocket connection without completing the close
handshake.
服务器有一个测试网站,看起来它的功能符合预期。问题似乎在客户端上。 client.State
中的值为Open
。
await socket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closing", CancellationToken.None);
之前关闭 http 上下文。 - Sergey.quixoticaxis.Ivanov