C# 如何在ASP.NET Core RC2中创建websocket服务器?
我使用Microsoft.AspNetCore.WebSockets.Server:0.1.0-rc2-final来制作websocket服务器,但不起作用。 在rc1中,它是1.0.0-rc1-final,并且运行良好 这是我的密码: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
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中实现它有困难