如何在ASP.NET Core RC2中制作websocket服务器?

我使用“Microsoft.AspNetCore.WebSockets.Server”:“0.1.0-rc2-final”来制作websocket服务器,但不起作用。 (在rc1中,它是1.0.0-rc1-final,它工作正常…)

这是我的代码:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddConsole(Configuration.GetSection("Logging")); loggerFactory.AddDebug(); app.UseWebSockets(); app.Use(async (http, next) => { if (http.WebSockets.IsWebSocketRequest) { IHandler handler = WebsocketManager.getHandler(http.Request.Path); if (handler == null) { await next(); } else { var webSocket = await http.WebSockets.AcceptWebSocketAsync(); if (webSocket != null && webSocket.State == WebSocketState.Open) { // TODO: Handle the socket here. WebsocketManager.Handle(webSocket, handler); } } } else { // Nothing to do here, pass downstream. await next(); } }); app.UseMvc(); } 

WebsocketManager是我自己的经理类。 以下是我处理websocket会话的方法:

  public async Task Listen() { OnOpen(); while (_webSocket.State == WebSocketState.Open) { var error = String.Empty; try { var buffer = new ArraySegment(new Byte[4096]); var received = await _webSocket.ReceiveAsync(buffer, CancellationToken.None); switch (received.MessageType) { case WebSocketMessageType.Close: OnClose(received.CloseStatus, received.CloseStatusDescription); break; case WebSocketMessageType.Text: var data = Encoding.UTF8.GetString(buffer.Array, buffer.Offset, buffer.Count).Trim('\0'); OnMessage(data); break; case WebSocketMessageType.Binary: OnMessage(buffer.Array); break; } } catch (Exception ex) { Console.WriteLine(ex); break; } } } 

然后,“_webSocket.ReceiveAsync”抛出exception“请求被中止”。

我相信客户不会关闭会话。

怎么解决?

你需要await这一行: WebsocketManager.Handle(webSocket, handler); 否则请求结束,资源被处理掉。