【问题标题】:Azure SignalR Serverless OnConnected-trigger with Azure-functions (Traditional model)Azure SignalR Serverless OnConnected-trigger with Azure-functions(传统模型)
【发布时间】:2021-01-22 20:11:25
【问题描述】:

我将 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");
        }
    }

我很难触发“OnConnected”事件。仅使用基于类的模型给出示例。 而 docs 对我并没有真正的帮助。

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

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

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

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

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

但是,使用上面的代码,触发器永远不会被击中。有什么想法吗?

【问题讨论】:

标签: asp.net-core azure-functions signalr serverless


【解决方案1】:

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

要使 SignalRTrigger 正常工作,您需要为 SignalR 中的函数设置一个 webhook。

当您使用 SignalRTrigger 部署函数时,它会做 2 件额外的事情:

  • 创建 webhook:https://<APP_NAME>.azurewebsites.net/runtime/webhooks/signalr
  • 在功能应用系统设置中创建 API 密钥代码 (signalr_extension)(请参阅 Azure 门户功能应用的“应用密钥”刀片中的“系统密钥”部分)

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

要配置 SignalR 事件 webhook,请转到 SignalR 的“设置”刀片并添加上游 URL https://<APP_NAME>.azurewebsites.net/runtime/webhooks/signalr?code=<API_KEY>

瞧!现在应该可以工作了

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

【讨论】:

    【解决方案2】:

    此代码 sn-p 有效。

    [FunctionName("OnConnected ")]
    public async Task OnConnected ([SignalRTrigger("YourHub", "connections", "connected ")]
    InvocationContext invocationContext, ILogger logger)
    {
        logger.LogInformation($"{invocationContext.ConnectionId} has connected");
    }
    

    也在 Azure SignalR 设置中配置上游 URL

    <Function_App_URL>/runtime/webhooks/signalr?code=<API_KEY>
    

    SignalR Service integration

    Function_App_URL 可以在 Function App 的概述页面上找到,API_KEY 由 Azure Function 生成。您可以从 Function App 的 App keys 刀片中的 signalr_extension 获取API_KEY

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-10
      • 2018-01-16
      • 2020-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-20
      相关资源
      最近更新 更多