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

IIS部署SignalR WebSocket报1006错误:本地正常IIS运行异常

解决IIS部署.NET Core 6 Web API + React项目WebSocket 1006错误的排查方案
  • 检查.NET Core项目WebSocket中间件配置顺序
    确保Program.cs中app.UseWebSockets()的位置正确,必须放在app.UseRouting()之后、app.UseEndpoints()之前,示例代码如下:

    var builder = WebApplication.CreateBuilder(args);
    // 注册服务...
    var app = builder.Build();
    
    // 其他中间件(如静态文件、认证授权等)
    app.UseRouting();
    app.UseWebSockets(); // 关键位置
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
        // 映射自定义WebSocket端点
        endpoints.Map("/ws", async context =>
        {
            if (!context.WebSockets.IsWebSocketRequest)
            {
                context.Response.StatusCode = StatusCodes.Status400BadRequest;
                return;
            }
            // 处理WebSocket逻辑
        });
    });
    app.Run();
    
  • 验证IIS应用程序池配置

    • 将应用程序池的.NET CLR版本设置为无托管代码,因为.NET Core是自托管模式,IIS仅作为反向代理,错误的CLR版本会导致WebSocket请求处理异常。
    • 确认应用程序池身份拥有项目目录的读写权限,权限不足可能导致连接中途断开。
  • 确保IIS反向代理传递WebSocket请求头
    在站点的web.config中,添加URL重写规则时必须保留WebSocket相关请求头,示例配置:

    <rewrite>
      <rules>
        <rule name="Proxy to .NET Core" stopProcessing="true">
          <match url="(.*)" />
          <action type="Rewrite" url="http://localhost:5000/{R:1}" />
          <serverVariables>
            <set name="HTTP_UPGRADE" value="{HTTP_UPGRADE}" />
            <set name="HTTP_CONNECTION" value="{HTTP_CONNECTION}" />
          </serverVariables>
        </rule>
      </rules>
    </rewrite>
    

    若使用IIS ARR(应用程序请求路由),需在ARR的Server Proxy Settings中勾选Enable WebSocket。

  • 修正前端WebSocket连接地址
    前端React应用的WebSocket连接地址必须匹配IIS部署后的域名,HTTPS环境下需使用wss://协议,避免浏览器因混合内容拦截连接。例如:

    // 本地开发
    // const socket = new WebSocket('ws://localhost:5000/ws');
    // 部署后
    const socket = new WebSocket('wss://your-domain.com/ws');
    
  • 排查日志与防火墙

    • 启用IIS失败请求跟踪,捕获WebSocket请求的详细错误流程,定位是否存在请求拦截或状态码异常。
    • 将.NET Core日志级别设为Debug,查看连接建立过程中的异常信息,比如端点映射错误、权限问题等。
    • 确认服务器防火墙开放了WebSocket使用的端口(默认80/443,自定义端口需手动开放),同时检查安全软件是否拦截了WebSocket连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 01:47:40