Mamy działającą usługę REST ASP.NET Web API REST, która korzysta z WebSockets na jednej z metod naszego kontrolera za pomocą HttpContext.AcceptWebSocketResponse (..)..net WebSocket: CloseOutputAsync kontra CloseAsync
Handler gniazdo kod wygląda mniej więcej tak ...
public async Task SocketHandler(AspNetWebSocketContext context)
{
_webSocket = context.WebSocket;
...
while(!cts.IsCancellationRequested)
{
WebSocketReceiveResult result = _webSocket.ReceiveAsync(inputSegment, cts.Token).Result;
WebSocketState currentSocketState = _webSocket.State;
if (result.MessageType == WebSocketMessageType.Close ||
currentSocketState == WebSocketState.CloseReceived)
{
// Should I use .CloseAysnc() or .CloseOutputAsync()?
_webSocket.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, "client requested", cts.Token).Wait();
}
if (currentSocketState == WebSocketState.Open)
{
...
}
}
}
Jaka jest różnica między .CloseAsync() i CloseOutputAysnc()? Próbowałem obu i obaj wydawali się działać dobrze, ale musi być jakaś różnica. Obaj mają bardzo podobne opisy na MSDN ...
System.Net.WebSockets.CloseAsync - Zamyka połączenie websocket jako asynchronicznej operacji przy użyciu ścisłej handshake zdefiniowany w rozdziale specyfikacji protokołu websocket 7.
System.Net.WebSockets.CloseOutputAsync - rozpoczyna lub kończy się blisko uzgadniania określonych w protokole websocket sekcji specyfikacji 7.