使用 Azure 函数的 Azure SignalR 无服务器 OnConnected 触发器(传统模型)

ger*_*b0n 5 signalr asp.net-core azure-functions serverless

我将 Azure SignalR 服务与 Azure Functions 结合使用,并且有以下代码:

    public class SignalRHubFunction
    {
        [FunctionName("SignalRConnected")]
        public async Task Run([SignalRTrigger("myhubname", "connections", "connected", ConnectionStringSetting = "AzureSignalRConnectionString")] InvocationContext invocationContext, ILogger logger)
        {
            logger.LogInformation($"{invocationContext.ConnectionId} connected");
        }
    }
Run Code Online (Sandbox Code Playgroud)

我很难触发“OnConnected”事件。仅提供基于类的模型的示例。而且这些文档对我来说并没有真正的帮助。

文档告诉我构造函数的类别SignalRTrigger参数应该是: connectionsmessages。所以我使用连接

该值必须设置为要触发的功能的消息类别。该类别可以是以下值之一: 连接:包括连接和断开连接事件 消息:包括除连接类别中的事件之外的所有其他事件

我不太明白文档中事件参数的含义

该值必须设置为消息事件才能触发该功能。对于消息类别,事件是客户端发送的调用消息中的目标。对于连接类别,仅使用已连接和已断开连接。

我猜他们是说你可以在连接断开之间进行选择。

然而,使用上面的代码永远不会触发触发器。有什么想法吗?

Cod*_*odi 7

原始答案:https://learn.microsoft.com/en-us/answers/questions/159266/debug-function-using-a-signalrtrigger.html

为了使 SignalRTrigger 工作,您需要为 SignalR 中的函数设置一个 Webhook。

当您使用 SignalRTrigger 部署函数时,它会执行 2 项额外操作:

  • 创建网络钩子:https://<APP_NAME>.azurewebsites.net/runtime/webhooks/signalr
  • 在函数应用系统设置中创建 API 密钥代码 ( signalr_extension)(请参阅 Azure 门户函数应用的“应用程序密钥”边栏选项卡中的“系统密钥”部分)

SignalR 将事件发布到此 webhook(因此显然这在本地不起作用,除非您有一个可以添加到 SignalR 的公共可寻址 IP)。

要配置 SignalR 事件 Webhook,请转到 SignalR 的“设置”边栏选项卡并添加上游 URLhttps://<APP_NAME>.azurewebsites.net/runtime/webhooks/signalr?code=<API_KEY>

瞧!现在应该可以了

参考: https: //learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-signalr-service-trigger ?tabs=javascript#send-messages-to-signalr-service-trigger-binding