C# 如何在ASP.NET Core RC2中创建websocket服务器?

C# 如何在ASP.NET Core RC2中创建websocket服务器?,c#,websocket,asp.net-core,.net-core-rc2,C#,Websocket,Asp.net Core,.net Core Rc2,我使用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) { loggerFacto

我使用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<Byte>(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抛出异常,请求被中止

我确信客户端没有关闭会话

如何修复它?

您需要等待这一行: WebsocketManager.HandlewebSocket,处理程序; 否则,请求将结束,资源将被释放。

您需要等待这一行: WebsocketManager.HandlewebSocket,处理程序;
否则,请求将结束,资源将被释放。

您是否尝试在ASP.NET Core中使用信号器功能?@JanshairKhan否,我只想制作一个简单的websocket侦听器作为游戏服务器传输层。您是否在Windows server 2008 R2或更高版本上开发和测试?据我所知,至少在包括Windows7在内的客户端操作系统上不支持WebSocket。不确定Win8/10,需要Windows Server 2008 R2或更高版本。如果您在不受支持的操作系统上运行它,您需要回退到长轮询或类似技术。SignalR这样做,因为WebSockets并不是每个地方都受支持。您可以在其中包含所有相关的代码a,以便我们可以复制该问题吗?仅供参考-当处理初始请求时,流似乎已关闭关闭关闭套接字。同样的代码在RC1中很好-还有为什么从1.0.0-RC1下降到0.1.0-rc2我们使用了错误的软件包?您是否试图在ASP.NET Core中使用信号器功能?@JanshairKhan不,我只想制作一个简单的websocket侦听器作为游戏服务器传输层。您是否在Windows server 2008 R2或更高版本上开发和测试?据我所知,至少在包括Windows7在内的客户端操作系统上不支持WebSocket。不确定Win8/10,需要Windows Server 2008 R2或更高版本。如果您在不受支持的操作系统上运行它,您需要回退到长轮询或类似技术。SignalR这样做,因为WebSockets并不是每个地方都受支持。您可以在其中包含所有相关的代码a,以便我们可以复制该问题吗?仅供参考-当处理初始请求时,流似乎已关闭关闭关闭套接字。同样的代码在RC1中很好-还有为什么从1.0.0-RC1下降到0.1.0-rc2我们使用了错误的软件包?是否有人发布固定完整代码示例我在ASP.NET core中实现它有困难有人发布固定完整代码示例我在ASP.NET core中实现它有困难