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

Windows Server 2019部署Web API与Blazor Server后数据库连接失败求助

部署Blazor Server与Web API到Windows Server 2019的web.config配置及问题排查

一、错误根源定位

这个“目标机器主动拒绝连接”的错误,核心原因大概率是Blazor Server的SignalR端点监听范围受限,或是IIS层面的模块/配置未正确启用,先从web.config的关键配置入手解决。

二、Blazor Server项目的web.config配置

1. 完整配置示例

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <!-- 必须使用AspNetCoreModuleV2模块,确保IIS已安装该模块 -->
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\你的BlazorServer项目.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess">
        <environmentVariables>
          <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />
          <!-- 关键:监听所有IP,不要只绑定localhost,否则外部/同服务器应用无法连接 -->
          <environmentVariable name="ASPNETCORE_URLS" value="http://*:7112;https://*:7113" />
        </environmentVariables>
      </aspNetCore>
      <!-- IIS层面强制启用WebSocket,仅在program.cs配置不够 -->
      <webSocket enabled="true" />
    </system.webServer>
  </location>
</configuration>

2. 核心配置说明

  • AspNetCoreModuleV2:Windows Server 2019必须安装对应版本的ASP.NET Core Hosting Bundle(自带该模块),否则IIS无法托管.NET Core项目。
  • hostingModel="inprocess":优先使用进程内托管模式,性能更优,同时避免进程外部署的端口监听权限问题。
  • ASPNETCORE_URLS:必须指定*监听所有IP,不能只写localhost:7112,否则仅本机可访问,服务器内其他应用(如Web API)也无法连接。
  • webSocket enabled="true":IIS全局层面开启WebSocket,和program.cs的配置形成互补,确保SignalR通信正常。

三、Web API项目的web.config配置

如果Web API需要和Blazor Server交互,确保配置符合服务器环境要求:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\你的WebApi项目.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess">
        <environmentVariables>
          <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />
          <!-- 配置Web API的监听端口,例如8080 -->
          <environmentVariable name="ASPNETCORE_URLS" value="http://*:8080" />
        </environmentVariables>
      </aspNetCore>
    </system.webServer>
  </location>
</configuration>

四、必做的额外配置检查

  1. 安装ASP.NET Core Hosting Bundle:在服务器管理器的“添加角色和功能”中安装对应.NET版本的Hosting Bundle,或直接下载官方安装包执行。
  2. IIS站点绑定:创建IIS站点时,绑定的IP选“全部未分配”,端口和ASPNETCORE_URLS一致,不要只绑定localhost。
  3. SignalR端点无限制:在Blazor Server的program.cs中,确保SignalR端点未限制仅localhost访问:
app.MapBlazorHub(options =>
{
    options.ClientTimeoutInterval = TimeSpan.FromSeconds(30);
});
// 无需添加IP限制逻辑
  1. 端口监听验证:用命令netstat -ano | findstr :7112检查服务器是否有进程在监听7112端口,无结果则说明项目未启动或端口配置错误。
  2. 应用池设置:IIS应用池的“.NET CLR版本”需设为“无托管代码”,因为.NET Core项目不需要传统.NET Framework托管环境。

五、快速排查步骤

  1. 开启Blazor Server的日志:将stdoutLogEnabled设为true,查看logs/stdout文件,排查项目启动失败的具体原因。
  2. 直接访问测试:用浏览器访问http://服务器IP:7112,确认Blazor页面能否正常打开,判断项目是否启动成功。
  3. 通信地址修正:如果Web API和Blazor Server在同一服务器,通信时使用服务器IP/域名,不要用localhost,避免系统环回访问限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 17:30:59