如何使用HubConnectionBuilder配置到Azure SignalR服务的ReactJS URL连接

hlswsv35  于 2023-04-22  发布在  React
关注(0)|答案(2)|浏览(264)

您好,我想知道如何设置HubConnectionBuilder URL以将我的客户端基于ReactJS函数的应用程序连接到Azure SignalR服务。我正在使用endpoint=https:xxxxxxxxxxxx-signalr.service.signalr.net;AccessKey= m5 QcxLFV +3 Wx + tzxxn 4SUiBqWZUOmzG 8 nix 4 OxxxOhg 4 =;Version=1.0;如下所示:

useEffect(() => {
console.log('testing const2');
const newConnection = new HubConnectionBuilder()
.withUrl('Endpoint=https://xxxxxxxxxxxx-    signalr.service.signalr.net;AccessKey=m5QcxLFV+3Wx+tzMZn4SUiBqWZUOmxxxxix4O1pOhg4=;Version=1.0;')            
.withAutomaticReconnect()
 .build();

 setConnection(newConnection);
    
 }, []);

希望与Azure SignalR服务建立连接。有人能告诉我如何正确设置此错误吗?

Cannot POST /Endpoint=https://xxxxxxxxxx-signalr.service.signalr.net;AccessKey=m5QcxLFV+3WxxxxxZn4SUiBqWZUOmzG8nix4O1pOhg4=;Version=1.0;/negotiate

:状态代码'404'这不是SignalR端点,或者有代理阻止连接。

3pmvbmvn

3pmvbmvn1#

我仍在研究,但基本上使用Azure SignalR服务,您可以使用Azure Function获取带有客户端或访问令牌的URL。它返回客户端应用程序(AKA ReactJS)特定的URL以包含在HubConnectionBuilder的withURL中。这样,出于安全目的,每个客户端都可以获得自己的URL。请确保CORS在Azure资源门户设置中启用所有来源。

eqoofvh9

eqoofvh92#

您试图输入SignalR Connection String作为端点URL。这不正确。
您应该在.withUrl()中为您的参数输入一个普通的url字符串,指向SignalR服务的client endpoint。这通常是您在后端服务中Map的端点,实际上可以让SignalR服务确切地知道客户端可以使用哪些方法等。
您的连接字符串将按照documentation here.用于后端组件
编辑:为了澄清,即使在无服务器模式下使用SignalR,您也需要额外的组件才能使一切正常工作:
您至少需要一个/negotiate端点作为Azure Function托管。然后,此端点将向客户端应用返回必要的连接令牌和详细信息,以便连接并启用消息传递。(此端点还应处理客户端身份验证)。然后,您将需要至少一个Azure Function端点,该端点将负责实际处理SignalR消息的逻辑。
你的协商Azure函数应该看起来像这样(取自Tutorial: Azure SignalR Service authentication with Azure Functions):
您的函数触发器配置:

{
    "disabled": false,
    "bindings": [
        {
            "authLevel": "anonymous",
            "type": "httpTrigger",
            "direction": "in",
            "methods": ["post"],
            "name": "req",
            "route": "negotiate"
        },
        {
            "type": "http",
            "direction": "out",
            "name": "res"
        },
        {
            "type": "signalRConnectionInfo",
            "name": "connectionInfo",
            "hubName": "default",
            "connectionStringSetting": "AzureSignalRConnectionString",
            "direction": "in"
        }
    ]
}
module.exports = async function (context, req, connectionInfo) {
    context.res.body = connectionInfo;
};

然后,你会想要另一个Azure函数来处理消息传递......例如,广播到所有连接的客户端。
因为从你的问题中并不清楚你到底想让客户端做什么,我不能真正帮助你弄清楚这个函数到底是什么样子的。但是,无论如何,你在上面的链接中有一个工作示例。

相关问题