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

ASP.NET Core SignalR部署Windows IIS报错:Handshake was canceled,启用WebSocket仍未解决

解决ASP.NET Core SignalR部署IIS后握手取消问题

排查步骤及解决方案

1. 确认IIS的WebSocket功能已启用

即便你已安装相关NuGet包,仍需确保IIS服务器本身的WebSocket协议已开启:

  • 打开服务器管理器 → 添加角色和功能 → 找到Web服务器(IIS)→ Web服务器 → 应用程序开发 → 勾选WebSocket协议,完成安装后重启IIS。

2. 检查ASP.NET Core托管组件

服务器必须安装对应版本的ASP.NET Core Hosting Bundle,版本要和项目的.NET Core版本完全匹配。安装完成后重启IIS和服务器。

3. 验证应用程序池配置

  • 应用程序池的.NET CLR版本需设置为无托管代码(ASP.NET Core为自托管模式,IIS仅做反向代理)。
  • 确认应用程序池的身份拥有足够权限访问应用目录及相关资源。

4. 核对SignalR路由配置

确保Program.cs/Startup.cs中正确配置了SignalR端点,示例代码如下:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddSignalR();

var app = builder.Build();

app.UseRouting();

app.MapHub<ChatHub>("/chatHub"); // 此路由需和客户端连接地址完全一致

app.Run();

客户端连接时的URL要和上述路由匹配:

const connection = new signalR.HubConnectionBuilder()
    .withUrl("/chatHub")
    .build();

5. 排查防火墙与代理限制

  • 检查服务器防火墙是否开放了应用使用的端口(默认80/443,自定义端口需手动开放)。
  • 若服务器前有反向代理(如ARR、Nginx),需确保代理配置支持WebSocket,允许传递Upgrade和Connection请求头。

6. 启用详细日志定位问题

在appsettings.json中添加日志配置,获取更详细的错误信息:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore.SignalR": "Debug",
      "Microsoft.AspNetCore.Http.Connections": "Debug"
    }
  }
}

部署后查看日志文件,就能找到握手取消的具体触发原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 19:52:19