今天写着个博客是为了大家早点跳出这个坑。我写的websocket 使用的是net core 2.2写的,一开始的时候报错说握手失败,直到后来看到别的大神说,初始化websocket的时候一定要在app.UseMvc之前执行,否则会被mvc 拦截,走不了自己实现的websocket请求处理,贴代码!
#region 1.0 配置WebSocket 服务
private void ConfigWebSocket(IApplicationBuilder app) {
// Apis.mobile.MobileWebSocketHandle.AddWebSocket(app);
WebSocketOptions options = new WebSocketOptions();
options.KeepAliveInterval = TimeSpan.FromSeconds(120);
options.ReceiveBufferSize = 4 * 1024;
//options.AllowedOrigins.Add("http://127.0.0.1:8848");
app.UseWebSockets(options);
HandleWebSocket handle = new HandleWebSocket();
app.Use(async (context, next) => {
if (context.Request.Path != "/WebSocketService") {
await next();
return;
}
if (!context.WebSockets.IsWebSocketRequest) {
await next();
return;
}
WebSocket socket = await context.WebSockets.AcceptWebSocketAsync();
await handle.AcceptAsync(context, socket);
});
}
#endregion
配置的地方单独写了一个方法,需要在配置的地方setup的【ConfigureProduction/ConfigureDevelopment】或者【Configure】方法中调用,直接传过来app对象就可以了,使用的时候 其中的handleWebSocket类就不贴出来了,有需要的留言,handle类中主要工作就是处理浏览器端发来的请求。
一切工作就绪之后就是部署到IIS上了,我用的服务器是2012 据说需要从2008开始才支持websocket,用2012妥妥的,部署的具体方法可以去看net core部署在IIS上的文章,网上一堆,下面说下需要注意的地方,在安装IIS的时候一定要把这个【websocket协议】勾上。
到此websocket就可以连接上了。