如何在 Visual Studio 的 Azure Functions 应用程序中调用和调试 SignalRTrigger 函数

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

我正在按照 this 指南构建我的第一个带有 SignalR 触发器绑定的 Azure Function App。我已经在 Azure 中设置了 Function App 和 SignalR 服务。

但现在我需要调试我的 SignalR 触发函数之一。我正在尝试使用本地函数主机 (func.exe) 使用 Visual Studio 2022 来执行此操作,只需在我的 Azure Functions 项目中按 F5 即可。

我的 ServerlessHub 带有一个函数 JoinGroup,我想在 Visual Studio 中调用和调试它。

        namespace FunctionApp
        {
            public class SimpleChat : ServerlessHub
            {
                [FunctionName("negotiate")]
                public SignalRConnectionInfo Negotiate([HttpTrigger(AuthorizationLevel.Anonymous)]HttpRequest req)
                {
                    var claims = GetClaims(req.Headers["Authorization"]);
                    return Negotiate(
                        claims.First(c => c.Type == ClaimTypes.NameIdentifier).Value,
                        claims
                    );
                }

                [FunctionName(nameof(JoinGroup))]
                public async Task JoinGroup([SignalRTrigger]InvocationContext invocationContext, string connectionId, string groupName)
                {
                    throw new ApplicationException("CODE REACHED");
                    await Groups.AddToGroupAsync(connectionId, groupName);
                }
            }
        }

我还用打字稿编写了一个简单的客户端,使用一个方法来调用我的 JoinGroup 函数:

            testjoinGroup(){
                if (this.isConnected()) {
                    this.hubConnection.invoke<any>("joinGroup", "testGroupName")
                        .then(x => console.log("success"))
                        .catch(err => console.log(err)):
                }
            }

连接创建成功,协商调用通过,上面的方法 testjoinGroup() 当我调用它时打印“成功”。但是,我没有在 Visual Studio 中达到断点。我的网络应用程序或 VS 中都没有收到任何错误。 我已配置“local.settings.json”以连接到我的 SignalR 实例。

我想做的事情根本不可能吗?我是否需要将更改部署到 Azure 才能测试新代码?

  • 我正在使用安装了 Azure 开发工作负载的 Visual Studio 2022。
  • 我的版本是.NET 6。
  • 使用 Microsoft.Azure.Webjobs.Extensions.SignalRServicce 1.8.0
c# azure-functions signalr signalr-hub azure-signalr
1个回答
0
投票

要在本地 Azure Functions 应用程序中调用和调试 SignalR 触发的函数,您需要配置两个关键方面:

  1. 将本地 Azure Function 暴露到 Internet:使您的本地 可通过互联网访问 Azure Function,您可以使用类似的工具 恩格罗克。该应用程序允许您在您的设备之间创建一条隧道 本地服务器(运行 Azure Function 的位置)和公共服务器 网址。这样,任何发送到公共 URL 的请求都将被转发 到您的本地环境,允许您测试和调试您的 在接近生产环境中运行。

  2. 在 Azure SignalR 中配置“上游端点”:一旦您的 Azure 功能可以通过隧道访问,您需要配置 Azure SignalR 服务中的上游端点。你可以从以下位置执行此操作 通过提供由以下方式生成的隧道的 URL 来访问 Azure 门户 恩格罗克。此配置将允许 Azure SignalR 发送消息 或通过隧道发送到本地 Azure Function 的事件 连接。

额外提示:请确保在测试和调试过程中保持 Ngrok 运行,因为如果 Ngrok 停止,隧道 URL 将变得不可用。

您可以在以下位置找到有关配置“上游端点”的文档:Azure SignalR 服务中的上游端点

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