首页 新闻 会员 周边

.net 7 webapi项目实现web socket服务端

0
悬赏园豆:100 [待解决问题]

我向在我的webapi项目实现一个websocket服务端,program.cs的配置如下:

其中WebSocketHandler是我自己定义的一个处理连接请求的类,代码如下:

我发现,我发送一个测试数据(xixi),客户端那边可以接收到,但是,一旦app.use执行完后,已经建立好的websocket连接就自动断开了,这是为什么?

程序员风123的主页 程序员风123 | 初学一级 | 园豆:102
提问于:2024-01-29 15:01
< >
分享
所有回答(3)
0

WebSocketHandler里Send之后就执行完了,它也不用Receive,不断开连接好像也没事做

复制粘贴机器人 | 园豆:697 (小虾三级) | 2024-01-29 15:52
0

你提供的代码中,似乎缺少一些关键的部分,我无法完全理解问题的根本原因。不过,我可以提供一些建议来帮助你排查问题。

首先,确保你的 WebSocketHandler 类正确实现了 ASP.NET Core 中的 WebSocketHandler 抽象类。在你的 WebSocketHandler 类中,可能需要处理连接的打开、关闭以及接收消息的逻辑。

其次,建议你检查一下在 Startup.cs 中是否有正确配置 WebSocket 中间件。以下是一个可能的示例:

csharp
Copy code
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// 其他配置...

app.UseWebSockets();
app.Use(async (context, next) =>
{
    if (context.WebSockets.IsWebSocketRequest)
    {
        WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync();
        // 使用你的 WebSocketHandler 类处理连接
        var socketHandler = new WebSocketHandler();
        await socketHandler.HandleAsync(context, webSocket);
    }
    else
    {
        await next();
    }
});

// 其他配置...

}
在上述配置中,我们首先启用了 WebSocket 中间件 (app.UseWebSockets()),然后通过中间件捕获 WebSocket 请求,并使用 WebSocketHandler 处理连接。

最后,确保你的 WebSocketHandler 类中的逻辑正确处理连接的打开、关闭以及消息的接收。这有助于确保 WebSocket 连接不会在 app.Use 执行完成后立即断开。

如果问题仍然存在,建议检查你的日志以查看是否有相关的错误信息,并尝试在不同的地方捕获异常以便更好地调试问题。如果可能的话,你可以提供更多关于连接处理的代码,以便更详细地分析问题。

Technologyforgood | 园豆:5675 (大侠五级) | 2024-01-29 20:19
0

建议楼主考虑一下SignalR

SonyXbox | 园豆:370 (菜鸟二级) | 2024-01-30 10:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册