You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Azure Functions测试部署本地Docker版SignalR服务器并获取连接字符串

在Docker中部署SignalR服务器用于Azure Functions测试

方案一:使用Azure SignalR官方模拟器(完全兼容云端服务)

微软官方提供的Azure SignalR模拟器可直接替代云端服务,无需修改现有Functions代码,仅需更换连接字符串即可实现本地隔离测试。

  1. 构建模拟器Docker镜像
    微软未直接发布官方镜像,但可通过简单Dockerfile自行构建:

    FROM mcr.microsoft.com/dotnet/sdk:6.0
    RUN dotnet tool install -g Microsoft.Azure.SignalR.Emulator
    ENV PATH="$PATH:/root/.dotnet/tools"
    CMD ["azsignalr-emulator", "start"]
    

    执行构建命令:

    docker build -t azsignalr-emulator .
    
  2. 启动Docker容器
    映射模拟器默认端口(8080用于API,5000用于WebSocket):

    docker run -d -p 8080:8080 -p 5000:5000 --name local-signalr azsignalr-emulator
    
  3. 获取Functions可用的连接字符串
    模拟器的连接字符串格式如下(AccessKey测试用可随意填写,或使用容器启动日志中的默认密钥):

    Endpoint=http://localhost:8080;AccessKey=abc123;Version=1.0;
    
  4. 配置Functions测试环境
    将Functions的AzureSignalRConnectionString配置项替换为上述字符串,即可让Functions连接到本地Docker内的SignalR模拟器。


方案二:运行极简ASP.NET Core SignalR Hub(自托管模式)

若不想依赖模拟器,可快速构建一个极简SignalR Hub的Docker镜像,完全满足测试需求:

  1. 创建极简SignalR Hub项目
    新建ASP.NET Core项目,添加SignalR包后,仅需两个文件:

    • NotificationHub.cs:
      using Microsoft.AspNetCore.SignalR;
      public class NotificationHub : Hub { }
      
    • Program.cs:
      var builder = WebApplication.CreateBuilder(args);
      builder.Services.AddSignalR();
      var app = builder.Build();
      app.MapHub<NotificationHub>("/notificationHub");
      app.Run();
      
  2. 构建Docker镜像
    使用标准ASP.NET Core Dockerfile:

    FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
    WORKDIR /src
    COPY ["SignalRTestHub/SignalRTestHub.csproj", "SignalRTestHub/"]
    RUN dotnet restore "SignalRTestHub/SignalRTestHub.csproj"
    COPY . .
    WORKDIR "/src/SignalRTestHub"
    RUN dotnet build "SignalRTestHub.csproj" -c Release -o /app/build
    
    FROM build AS publish
    RUN dotnet publish "SignalRTestHub.csproj" -c Release -o /app/publish /p:UseAppHost=false
    
    FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS final
    WORKDIR /app
    COPY --from=publish /app/publish .
    EXPOSE 80
    ENTRYPOINT ["dotnet", "SignalRTestHub.dll"]
    

    执行构建:

    docker build -t local-signalr-hub .
    
  3. 启动容器

    docker run -d -p 5000:80 --name local-signalr-hub local-signalr-hub
    
  4. 配置Functions为自托管模式
    移除AzureSignalRConnectionString配置,添加:

    SignalRHubUrl=http://localhost:5000/notificationHub
    

    修改Functions的SignalR输出绑定,指定HubName为NotificationHub,并将ConnectionStringSetting指向SignalRHubUrl。


验证方法

启动容器后,用SignalR客户端连接对应端点(方案一:http://localhost:8080/client/?hub=你的Hub名;方案二:http://localhost:5000/notificationHub),运行测试即可确认消息仅在本地会话流转,完全隔离云端环境。

内容的提问来源于stack exchange,提问作者Woozar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 12:40:15