我正在构建Blazor服务器端数据库应用程序。
我的要求之一是用户可以在不同的选项卡中打开每个网站页面
我发现,在打开5个选项卡后,任何新页面都会被阻止呈现。如果我关闭一个页面,那么第六个页面可以呈现。显然,这是因为浏览器一次可以支持有限数量的SignalR连接。我读过Chrome的限制是一次6个(尽管我只能工作5个(。
Chrome中的错误消息:
Error: Connection disconnected with error 'Error: Server returned handshake error: Handshake was canceled.'
Error: Error: Server returned handshake error: Handshake was canceled.
Uncaught (in promise) Error: Cannot send data if the connection is not in the 'Connected' State.
at e.send (blazor.server.js:1)
这个问题有解决办法吗?还是我需要探索移植到Blazor客户端?
我找到了关于这个主题的以下文章,但不确定它是否可以应用于Blazor应用程序:SignalR和浏览器连接限制
这有点可怕,因为我已经构建了相当多的代码,不想花太多时间试图破解解决方案。
我终于成功地在我的内部网络上复制了它,现在我已经安装了WebSockets,它似乎已经得到了解决。
- 打开服务器管理器
- 打开添加角色和功能
- 展开Web服务器(IIS(
- 展开应用程序开发
- 选择WebSocket协议
安装后,我打开了我的blazor服务器应用程序的20个选项卡,每个选项卡都在不同的页面上,问题没有再次出现(为了确保安全,我还对每个选项卡进行了几次刷新(。
我在阅读后发现了这个
Blazor在使用WebSockets作为SignalR传输时效果最佳,因为它具有较低的延迟、可靠性和安全性。当WebSockets不可用或应用程序被明确配置为使用长轮询时,SignalR会使用长轮询。
来自Blazor文档。