news 2026/7/14 12:07:00

Web开发:IIS服务器部署ASP.NET Core应用全流程实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Web开发:IIS服务器部署ASP.NET Core应用全流程实战

1. 环境准备:IIS与.NET Core运行时安装

第一次在Windows Server上部署ASP.NET Core应用时,我花了整整两天时间才搞明白环境依赖关系。IIS在这里其实扮演的是反向代理角色,真正运行.NET Core应用的是Kestrel服务器。下面分享我总结的高效配置方法:

安装IIS核心组件: 在Windows搜索栏输入"启用或关闭Windows功能",勾选以下关键项:

  • Internet Information Services → Web管理工具 → IIS管理控制台
  • Internet Information Services → 万维网服务 → 应用开发功能 → ASP.NET 4.8(向后兼容)
  • Internet Information Services → 万维网服务 → 常见HTTP功能 → 静态内容、默认文档

注意:如果跳过ASP.NET 4.8安装,后续可能遇到HTTP错误500.19。这是我在生产环境踩过的坑,因为某些IIS模块仍依赖传统ASP.NET。

安装.NET Core运行时: 访问微软官方下载页面获取最新版:

# 下载地址(示例): https://dotnet.microsoft.com/download/dotnet-core

必须安装:

  1. ASP.NET Core Runtime(运行环境)
  2. .NET Core Runtime(基础库)
  3. Hosting Bundle(IIS集成模块)

安装完成后验证:

dotnet --list-runtimes # 应显示类似输出: # Microsoft.AspNetCore.App 6.0.8 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App] # Microsoft.NETCore.App 6.0.8 [/usr/share/dotnet/shared/Microsoft.NETCore.App]

2. 应用发布与部署配置

发布ASP.NET Core应用时,我强烈推荐使用框架依赖的便携式发布方式。这样既能保持部署包精简,又能利用服务器上的共享运行时。

发布命令示例

dotnet publish -c Release -f net6.0 --self-contained false -o ./publish

关键文件结构说明:

/publish │ web.config # IIS配置文件 │ YourApp.dll # 主程序集 ├── wwwroot/ # 静态资源 ├── Views/ # 视图文件 └── appsettings.json # 配置文件

IIS站点配置技巧

  1. 在IIS管理器中右键"应用程序池" → 新建 → 命名如"MyAppPool"

  2. 将.NET CLR版本设为"无托管代码"(必须!)

  3. 高级设置中:

    • 启用32位应用程序 → False(除非有特殊需求)
    • 进程模型 → 标识 → ApplicationPoolIdentity(推荐)
  4. 右键"网站" → 添加网站 → 设置:

    • 物理路径:指向publish文件夹
    • 绑定:建议使用特定端口如5000,避免与默认站点冲突
    • 主机名:生产环境填写实际域名

3. 安全加固与网络配置

防火墙设置

# 允许入站流量(管理员权限运行): New-NetFirewallRule -DisplayName "Allow MyApp Port" -Direction Inbound -LocalPort 5000 -Protocol TCP -Action Allow

环境变量管理: 通过web.config配置开发/生产环境:

<aspNetCore processPath="dotnet" arguments=".\YourApp.dll" stdoutLogEnabled="true"> <environmentVariables> <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" /> <environmentVariable name="DOTNET_PRINT_TELEMETRY_MESSAGE" value="false" /> </environmentVariables> </aspNetCore>

权限问题排查清单

  • 应用程序池账户对publish文件夹的读取/执行权限
  • 对logs文件夹的写入权限(如果启用stdout日志)
  • 对临时目录(%TEMP%)的写入权限

4. 深度故障排查指南

当遇到HTTP 502.5错误时,按以下步骤排查:

  1. 检查事件查看器

    • Windows日志 → 系统:查找来源为"IIS AspNetCore Module"的条目
    • 应用程序和服务日志 → Microsoft → IIS → AspNetCore Module
  2. 启用详细日志

<aspNetCore processPath="dotnet" arguments=".\YourApp.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout">

日志文件将记录Kestrel启动过程中的详细错误。

  1. 常见错误解决方案

    • 错误ANCM:重新安装Hosting Bundle
    • 端口冲突:检查是否有其他进程占用相同端口
    netstat -ano | findstr :5000
    • 依赖缺失:在服务器执行dotnet YourApp.dll直接运行测试
  2. 性能调优参数

<aspNetCore processPath="dotnet" arguments=".\YourApp.dll" startupTimeLimit="120" <!-- 启动超时延长 --> rapidFailsPerMinute="5" <!-- 每分钟最大崩溃次数 --> requestTimeout="00:10:00"> </aspNetCore>

5. 高级部署策略

蓝绿部署实践

  1. 准备两个完全相同的站点(如MyApp_Blue和MyApp_Green)
  2. 使用ARR(应用请求路由)设置流量切换规则
  3. 通过PowerShell脚本实现零停机更新:
# 禁用旧站点 Stop-WebSite -Name "MyApp_Blue" # 同步文件到新部署目录 Robocopy .\publish \\server\MyApp_Green /MIR # 启用新站点 Start-WebSite -Name "MyApp_Green"

健康检查配置: 在Startup.cs中添加:

app.UseHealthChecks("/health", new HealthCheckOptions { Predicate = _ => true, ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse });

然后在IIS中设置URL重写规则,将/health请求直接代理到Kestrel,绕过缓存等中间件。

6. 性能监控与优化

启用动态压缩

# 安装压缩模块 Install-WindowsFeature Web-Dyn-Compression # 配置压缩规则 Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter "system.webServer/httpCompression" -name "." -value @{dynamicTypes='text/plain,text/html,application/json'}

工作进程优化

# 设置应用程序池回收策略 Set-ItemProperty IIS:\AppPools\MyAppPool -Name Recycling.periodicRestart.time -Value "00:00:00" Set-ItemProperty IIS:\AppPools\MyAppPool -Name processModel.idleTimeout -Value "00:00:00"

内存限制调整

<system.applicationHost> <applicationPools> <add name="MyAppPool" autoStart="true" managedRuntimeVersion="" startMode="AlwaysRunning"> <recycling logEventOnRecycle="Time, Requests, ConfigChange"> <periodicRestart requests="10000" /> </recycling> <processModel identityType="ApplicationPoolIdentity" loadUserProfile="true" setProfileEnvironment="true" idleTimeout="00:00:00" maxProcesses="1" shutdownTimeLimit="90" /> </add> </applicationPools> </system.applicationHost>

在实际项目中,我发现合理配置这些参数可以将ASP.NET Core应用在IIS上的吞吐量提升3-5倍。特别是在高并发场景下,关闭空闲超时和设置预热启动能显著降低第一个请求的延迟。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 12:05:50

终极指南:如何用HsMod插件彻底优化你的炉石传说游戏体验

终极指南&#xff1a;如何用HsMod插件彻底优化你的炉石传说游戏体验 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod 还在为炉石传说中冗长的动画、烦人的弹窗和受限的界面感到困扰吗&#…

作者头像 李华
网站建设 2026/7/14 12:05:35

终极指南:在iOS设备上流畅运行Minecraft Java版

终极指南&#xff1a;在iOS设备上流畅运行Minecraft Java版 【免费下载链接】PojavLauncher_iOS A Minecraft: Java Edition Launcher for Android and iOS based on Boardwalk. Succeeded by https://github.com/AngelAuraMC/Amethyst-iOS 项目地址: https://gitcode.com/Gi…

作者头像 李华
网站建设 2026/7/14 12:05:20

【HarmonyOS】笔记三-列表进阶:从基础渲染到交互优化

1. 长列表性能优化实战在电商商品瀑布流或新闻资讯列表这类场景中&#xff0c;数据量往往达到数百甚至上千条。传统渲染方式会导致内存暴增和卡顿&#xff0c;我在实际项目中曾遇到加载500条商品数据时页面帧率跌至8fps的情况。HarmonyOS提供了三种核心优化方案&#xff1a;Laz…

作者头像 李华
网站建设 2026/7/14 12:05:16

TensorRT模型构建最佳实践:从ONNX导出到引擎序列化的避坑指南

TensorRT模型构建最佳实践&#xff1a;从ONNX导出到引擎序列化的避坑指南 一、TensorRT的"正确性悬崖"——导出容易&#xff0c;精度对齐难 TensorRT是NVIDIA推出的高性能推理优化器和运行时&#xff0c;通过算子融合、精度校准、kernel自动调优和显存优化&#xff0…

作者头像 李华
网站建设 2026/7/14 12:04:11

微软i-Code:5分钟掌握多模态AI的任意到任意生成革命

微软i-Code&#xff1a;5分钟掌握多模态AI的任意到任意生成革命 【免费下载链接】i-Code 项目地址: https://gitcode.com/gh_mirrors/ic/i-Code 多模态AI正以前所未有的速度改变着人工智能的边界&#xff0c;而微软研究院的i-Code项目正在引领这场革命。作为集成式多模…

作者头像 李华
网站建设 2026/7/14 12:03:56

CCF-CSP认证考试 202312-3 树上搜索:从模拟到优化的算法精讲

1. 题目背景与核心问题这道CCF-CSP认证考试的第三题&#xff0c;描述了一个名词分类系统的场景。系统通过树形结构组织名词类别&#xff0c;每个类别都有权重值表示名词属于该类的可能性。题目要求实现一个二分策略&#xff0c;通过尽可能少的提问次数确定名词的具体分类。实际…

作者头像 李华