如何在ASP.NET Core RC2中制作Websocket服务器? [英] How to make websocket server in ASP.NET Core RC2?
问题描述
我使用 Microsoft.AspNetCore.WebSockets.Server: 0.1.0-rc2-final制作一个websocket服务器,但不起作用。
(在rc1中,它是1.0.0-rc1-final,它可以正常工作...)
I use "Microsoft.AspNetCore.WebSockets.Server": "0.1.0-rc2-final" to make a websocket server, but not work. (In rc1, it is 1.0.0-rc1-final, and it work fine...)
这是我的代码:
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会话的方式:
WebsocketManager is my own manager class. And Here is how I handle websocket session:
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引发的异常请求已中止。
And then, "_webSocket.ReceiveAsync" thrown exception "The request was aborted."
我确定客户端没有关闭会话。
I am sure client not close the session.
推荐答案
您需要 await
这行:
WebsocketManager.Handle(webSocket,handler);
否则,请求将结束并且资源将被处置。
You need to await
this line:
WebsocketManager.Handle(webSocket, handler);
Otherwise the request ends and the resources get disposed.
这篇关于如何在ASP.NET Core RC2中制作Websocket服务器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!