我开发了一个在桌面上运行良好的 blazor 服务器应用程序,现在我在移动平台上测试她。
当我将浏览器置于后台时,我遇到了 signalR 连接问题。 当我回去时,如果速度足够快,我会收到消息 “正在尝试重新连接到服务器”x/8,大约 15 秒后重新连接(这太多了),如果 5 分钟后我完全断开连接,我必须重新启动应用程序。
我找到了一些关于此的文档,但没有一致的。由于 blazor,客户端配置和事件(在 js 中)似乎与经典的 signalr 客户端不同,并且服务器在不同的超时之间丢失。
我尝试找到一种方法来配置服务器和客户端以管理“休眠”连接(如果我在 20 分钟后断开连接则可以,但我希望至少能够重新连接直到 20 分钟不活动),但这真的很难测试,因为我无法在我的笔记本电脑上重现开发中的这种行为。
我在网上看到一些建议 make document.location.reload() 的解决方案
Blazor.defaultReconnectionHandler._reconnectCallback = function(d) {
document.location.reload();
但这对我来说不是解决方案,因为我不想在 session 中丢失所有内容。
感谢您的建议和帮助!
最佳答案
对于那些陷入此类问题的人,我能够通过使用此处描述的信号器选项来解决这个问题:https://learn.microsoft.com/en-us/aspnet/core/blazor/fundamentals/signalr?view=aspnetcore-5.0&pivots=server
实际上,这并不是真正的移动问题,因为我将笔记本电脑置于休眠状态超过 3 分钟时也有同样的行为。
3 分钟的有效期来自这个参数 DisconnectedCircuitRetentionPeriod 3 分钟断开的电路在被拆除之前保留在内存中的最长时间。
我只是增加了这个参数的时间,当手机/笔记本电脑退出 sleep 状态时它能够重新连接。
blazor 文档对此不是很清楚
关于asp.net-core - Chrome Mobile 在后台时 Blazor 服务器断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68654268/