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

隔离工作者模型下SignalR客户端无法获取Negotiate API响应

SignalR Negotiate API无响应问题排查

环境信息

  • 客户端:基于@microsoft/signalr@6.0.6的JavaScript程序
  • 服务端依赖NuGet包:
    • Microsoft.AspNetCore.Http v8.0
    • Microsoft.Azure.Functions.Worker v1.21.0
    • Microsoft.Azure.Functions.Worker.Extensions.SignalRService v1.13.0
    • Microsoft.Azure.Functions.Worker.Sdk v1.17.0

服务端实现代码

using Microsoft.AspNetCore.Http;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;

namespace TestSignalRProj
{
    public class SignalRNegotiate
    {
        private readonly ILogger<SignalRNegotiate> _logger;

        public SignalRNegotiate(ILogger<SignalRNegotiate> logger)
        {
            _logger = logger;
        }

        [Function(nameof(Negotiate))]
        public static string Negotiate(
          [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req,
          [SignalRConnectionInfoInput(HubName = "submission")] string connectionInfo)
        {
            return connectionInfo;
        }
    }
}

问题现象

使用Postman调用该Negotiate API时无任何响应返回,附带相关截图:

  • Kestrel日志截图
  • Postman响应截图

排查与解决方案

1. 修正方法实例/静态属性冲突

当前Negotiate方法为静态方法,但类通过构造函数注入了ILogger依赖,静态方法无法访问实例级注入的服务,可能导致函数执行异常。将方法改为实例方法:

[Function(nameof(Negotiate))]
public string Negotiate(
  [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req,
  [SignalRConnectionInfoInput(HubName = "submission")] string connectionInfo)
{
    _logger.LogInformation("Negotiate API 请求已接收");
    return connectionInfo;
}

2. 验证SignalR服务连接配置

确保函数应用配置中已正确添加AzureSignalRConnectionString,值为SignalR Service的有效连接字符串,且该字符串具备生成连接信息的权限(避免使用只读连接字符串)。

3. 调整返回格式适配SignalR客户端

直接返回字符串可能导致响应内容类型非application/json,而SignalR客户端期望JSON格式的连接信息。可改为返回IActionResult确保格式正确:

using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;

// ...

public IActionResult Negotiate(
  [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req,
  [SignalRConnectionInfoInput(HubName = "submission")] string connectionInfo)
{
    var connectionData = JsonConvert.DeserializeObject(connectionInfo);
    return Ok(connectionData);
}

需额外安装Newtonsoft.Json NuGet包。

4. 启用详细日志定位异常

在host.json中配置更详细的日志级别,捕获函数执行过程中的异常信息:

{
  "logging": {
    "logLevel": {
      "TestSignalRProj": "Information",
      "Microsoft.Azure.Functions.Worker": "Information"
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 11:06:22