无法使 Azure SignalR 在默认模式下工作

问题描述 投票:0回答:1

我有一个使用 .Net Core 8 制作的服务,它是一个带有 SignalR Hub 的 Web API。该服务将水平扩展。因此,我打算在默认模式下使用 Azure SignalR 服务作为我的服务的不同实例之间的代理。

根据官方文档,我了解我的用例是默认模式的用途https://learn.microsoft.com/en-us/azure/azure-signalr/concept-service-mode

我有一个使用 ReactJS 开发的客户端,使用

"@microsoft/signalr" library: "^8.0.0"
,它在未经任何授权的情况下连接到我的集线器。

到目前为止,在不使用 Azure SignalR 的情况下,我的应用程序当前运行完美(在这两种情况下,在我的本地环境中都是容器化和非容器化的)。对于容器化案例,我使用 Azure 容器应用程序。

如果我做的一切正确,我已经在默认模式下初始化了我的 Azure SignalR 实例,我所做的唯一一件事就是为我的客户端(前端)添加 CORS 策略:

enter image description here

在我的服务器(后端)上,我只有一个集线器,在路径中称为 ShopHub:

/hub/shop
我只是用 .AddAzureSignalR(); 实现了该服务;并添加了Azure SignalR提供的连接字符串。它似乎默认初始化 5 个连接,如文档中所示

https://learn.microsoft.com/en-us/azure/azure-signalr/signalr-concept-messages-and-connections

,所以我在这里没有看到任何问题:

enter image description here 现在,在我的客户端(前端)中,我必须尝试不同的事情。最初,我替换了基本路径,结果如下所示:

app.MapHub<ShopHub>("/hub/shop")

。我得到了 404。这种方法非常适合我的容器化实例,但使用 Azure SingalR 时却不起作用。 (groupId 是我订阅客户端的组,此详细信息无关)。

然后我发现在一些示例中,在Azure SignalR提供的端点之后,他们添加了/client。这次我的路线结果是这样的:

https://mysignalrservice.service.signalr.net/hub/shop/negotiate?groupId=some-guid&negotiateVersion=1

,我得到了状态 400,错误为“需要 'hub' 查询参数”。更近了,我想。

然后我按照错误提示添加了 hub 参数,我的路线变成了这样:

https://mysignalrservice.service.signalr.net/client/hub/shop/negotiate?groupId=some-guid&negotiateVersion=1

。这次,我又得了400分。

作为测试的最后一个替代方案,我选择从 URL 中删除中心路径,结果如下:

https://mysignalrservice.service.signalr.net/client/hub/shop/negotiate?hub=shophub&groupId=some-guid&negotiateVersion=1

。这次我收到了401(未经授权)。有趣的是,显然解决方案可能就在这里。

需要考虑的一个因素是所有请求都到达 Azure SignalR 实例,我能够使用实时跟踪工具验证这一点 (

https://learn.microsoft.com/en-us/azure/azure-signalr/signalr -如何排除实时跟踪故障

):

enter image description here 我正在研究其他实现,不幸的是绝大多数都使用无服务器配置。据我了解,在这种情况下,有必要为 /negotiate 添加端点(通常使用 Azure Functions)。我还了解到,在默认模式情况下没有必要,因为协商端点已在我的服务器上可用,并且 Azure SignalR 应该重定向。

作为最后一个测试想法,我还在后端的 CQRS 配置中添加了所有路由,包括 Azure SignalR 服务的路由,也没有任何改进。

每种方法都经过本地和远程测试。远程我的客户端是一个 Azure 静态 Web 应用程序,如前所述,我的服务器是容器化的并安装在 Azure 容器应用程序上。

我做错了什么?

提前致谢!

reactjs asp.net-core signalr azure-signalr
1个回答
0
投票
https://mysignalrservice.service.signalr.net/client/negotiate?hub=shophub&groupId=some-guid&negotiateVersion=1

模式。

在集成 Azure SignalR 之前,我们必须在不使用 azure signalr 的情况下使所有功能正常工作。

并且

Default

用于连接到asp.net core siganlr,而不是azure signalr服务。

所以我们无法自定义Url来连接到azure signalr,这就是为什么我们可以在

HubConnectionBuilder

中看到404。

Live Trace

这是您可以参考的 azure signalr 工作流程。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.