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

.NET 8 环境下 SignalR 连接失败问题求助

.NET 7迁移到.NET 8后SignalR部署到IIS 10无法连接问题

本地Visual Studio 2022(Win11)环境运行正常,但部署到Windows Server 2019的IIS 10上时,SignalR在hub.start()阶段报错,无法建立连接。

客户端代码

<script>
  var hub = new signalR.HubConnectionBuilder()
    .withUrl("/hub")
    .withAutomaticReconnect()
    .configureLogging(signalR.LogLevel.Debug)
    .build();

var initMessaging = async function() {
  try {
    console.log("Before hub.start()")
    await hub.start()
      .then(() => {
        console.log("Hub connection established");       
      })
      .catch((err) => {
        console.error("[1]:", err);
      });
    console.log("After hub.start()")
  } catch (err) {
    console.error("[2]:", err);
  }
}

$(function() {
  initWhenReadyMessaging();
});
</script>

服务端Program.cs相关代码

...
services.AddSignalR();
...
var desiredTransports = HttpTransportType.WebSockets | HttpTransportType.LongPolling;
app.MapHub<SignalRHub>("/hub", (options) =>
{
    options.Transports = desiredTransports;
});

环境信息

  • 服务器:Windows Server 2019 Standard、IIS 10.0.17763.1、.NET 8.0.0 Windows Server Hosting bundle
  • 依赖包:@microsoft/signalr@8.0.0、jQuery 3.7.1

排查与解决方案建议

  1. 启用IIS WebSocket协议
    打开服务器管理器→添加角色和功能→Web服务器(IIS)→应用程序开发,确保WebSocket协议已勾选安装。.NET 8对WebSocket依赖更严格,未启用会直接导致连接失败。

  2. 修复.NET 8 Hosting Bundle
    重新运行.NET 8.0.0 Windows Server Hosting bundle安装包,选择修复模式。确认IIS模块中存在AspNetCoreModuleV2。

  3. 调整应用程序池设置

    • 将应用程序池的.NET CLR版本设置为无托管代码(ASP.NET Core应用无需托管代码)
    • 确认应用程序池身份拥有网站目录的读写权限
  4. 简化SignalR传输配置
    暂时移除传输方式限制,让SignalR自动选择合适传输:

    app.MapHub<SignalRHub>("/hub");
    

    若WebSocket仍有问题,可单独启用LongPolling测试:

    options.Transports = HttpTransportType.LongPolling;
    
  5. 检查客户端代码笔误
    客户端中定义的函数是initMessaging,但初始化时调用的是initWhenReadyMessaging,修正为:

    $(function() {
      initMessaging();
    });
    

    同时建议统一使用async/await语法,避免then/catch混合,便于错误追踪:

    var initMessaging = async function() {
      try {
        console.log("Before hub.start()")
        await hub.start();
        console.log("Hub connection established");
        console.log("After hub.start()")
      } catch (err) {
        console.error("Connection failed:", err);
      }
    }
    
  6. 查看服务器日志
    在Program.cs添加事件日志记录:

    builder.Logging.AddEventLog();
    

    打开Windows事件查看器→应用程序日志,获取服务器端的详细错误信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:53:17