在 IIS 部署 .NET6 WebApi 应用

Step1、安装IIS管理器

左下角放大镜搜索:

bash 复制代码
服务器管理器

右上角,点击"管理":

选择"添加角色和功能":

直接"下一步":

选择"基于角色或基于功能的安装":

选中服务器:

勾选"Web服务器":

勾选".NET Framework 4.7 功能":

执行安装之后,可以在放大镜搜索到"IIS":

Step2、安装 Hosting Bundle

下载地址:

bash 复制代码
https://dotnet.microsoft.com/en-us/download/dotnet/6.0

安装:

重启服务器,查看模块:

已包含"ASP.NET Core Module v2"模块:

Step3、代码打包发布

bash 复制代码
dotnet publish v2.csproj -c Release -r win-x64 --self-contained false -o Publish/V1.0.0

参数解释:

  • -c Release:指定生成配置为 Release(优化版本,移除调试符号)。
  • -r win-x64:指定目标运行时为 Windows x64。
  • --self-contained false:不包含 .NET 运行时,依赖用户系统已安装的 .NET 环境。
  • -o Publish/V1.0.0:输出路径为 Publish/V1.0.0

最终效果:

  • 输出内容:仅应用程序文件(.exe、程序集 .dll)和第三方依赖项。
  • 体积:较小(仅应用代码)。

Step4、IIS 配置网站

右键添加网站:

名称随便填:

测试:

日志:

Step5、配置 Https

这里使用自签名证书做演示,IIS面板打开"服务器证书":

选择"创建自签名证书":

随便填个名字:

生成的证书:

右键添加网站,这里注意使用"https":

选择刚刚生成的证书:

启动报错:

复制代码
万维网发布服务 (w3svc) 已停止。除非万维网发布服务正在运行,否则无法启动网站。

解决方案:

  1. 按下 Win + R,输入 services.msc,回车。
  2. 在服务列表中找到 "World Wide Web Publishing Service"。
  3. 如果状态为"已停止",右键点击并选择"启动"。

报错:

复制代码
ERR_SSL_KEY_USAGE_INCOMPATIBLE

这个错误是 Chrome、Edge 等现代浏览器为了强化安全策略而引入的,根源在于 IIS 管理器生成的默认自签名证书缺少一个关键的密钥用法:DigitalSignature。

以管理员身份打开 Windows PowerShell,运行以下命令:

bash 复制代码
New-SelfSignedCertificate -FriendlyName "Your Certificate Name" -DnsName "localhost" -KeyUsage DigitalSignature -CertStoreLocation cert:\LocalMachine\My -NotAfter (Get-Date).AddYears(10)

命令参数说明:

  • -FriendlyName "Your Certificate Name":证书的显示名称,可以自定义,例如 "My Dev Certificate"。

  • -DnsName "localhost":这是最重要的参数之一。指定证书要绑定的域名或主机名。如果你是通过 IP 地址(如 127.0.0.1)或具体计算机名访问网站,请务必将 localhost 替换为对应的值。

  • -KeyUsage DigitalSignature:这是修复错误的关键。为证书添加浏览器强制要求的数字签名密钥用法。

  • -CertStoreLocation cert:\LocalMachine\My:将证书安装到本地计算机的"个人"证书存储中,这样 IIS 才能识别并使用它。

  • -NotAfter (Get-Date).AddYears(10):将证书的有效期设置为10年,避免频繁更换的麻烦。

在 IIS 中绑定新证书:

测试:

补充:Hosting Bundle

.NET Core Hosting Bundle 是微软官方提供的一个软件包,专门用于在 Windows 服务器上通过 IIS 托管和运行 ASP.NET Core 应用程序。你可以将它理解为一座桥梁,无缝连接了 ASP.NET Core 应用与 IIS 服务器。

核心组件与作用

这个安装包之所以关键,是因为它集合了让 ASP.NET Core 应用在 IIS 上运行所需的几乎所有核心组件:

组件名称 主要作用
.NET Core 运行时 (.NET Core Runtime) 提供了运行 .NET 应用程序所需的基础环境,包括垃圾回收器、即时编译器(JIT)和核心库等。
ASP.NET Core 模块 (ANCM / ASP.NET Core Module) 这是一个关键的 IIS 模块。它充当了反向代理的角色,负责将来自 IIS 的请求转发给后台的 ASP.NET Core 应用(即 Kestrel 服务器),从而实现了 IIS 与应用的集成。
.NET Core 库 (.NET Core Library) 提供了 .NET 应用程序运行所需的基础类库支持。

主要优势

相比单独安装运行时和其他组件,选择 Hosting Bundle 有几个明显的好处:

  • 简化部署流程:你不需要分别安装 .NET 运行时、ASP.NET Core 运行时和 IIS 模块,一个安装包就能搞定所有必备项,大大降低了部署的复杂性。
  • 确保兼容与稳定:这个捆绑包由微软官方发布和维护,确保了各个组件之间的版本兼容性,为生产环境的稳定运行提供了保障。
  • 自动集成与生命周期管理 :安装后,它会自动在 IIS 中注册 AspNetCoreModuleV2 模块。同时,IIS 也能自动检测并管理 ASP.NET Core 应用程序的启动、停止和回收,让运维更省心。

部署与配置要点

在安装和配置时,有几个关键点需要注意:

  1. 安装顺序很重要 :建议先安装好 IIS,再安装 Hosting Bundle。如果顺序反了,可能会遇到跨域或配置方面的问题,此时通常需要卸载并重新安装 Hosting Bundle。
  2. 重启 IIS 服务:安装完成后,建议重启 IIS 或整个服务器,以确保所有环境变量和配置更改都已生效。
  3. 验证安装是否成功
    • 检查 IIS 模块 :打开 IIS 管理器,点击你的网站,在"模块"功能中,应该能看到名为 AspNetCoreModuleV2 的条目。
    • 配置应用程序池 :为你的网站创建应用程序池时,在".NET CLR 版本"设置中选择 "无托管代码"。因为 ASP.NET Core 应用在独立的进程中运行,不依赖 IIS 的 .NET 运行时。
  4. 生产环境与 SDK :在生产服务器上,不需要安装 .NET SDK。SDK 主要用于开发、编译和发布,而 Hosting Bundle 已经包含了运行应用所需的一切。

总的来说,.NET Core Hosting Bundle 是你在 Windows Server + IIS 环境下部署 ASP.NET Core 应用的核心工具。它通过集成运行时的必要组件和关键的 IIS 反向代理模块,让 .NET 应用能够在传统强大的 IIS 服务器上高效、稳定地运行。

相关推荐
忍冬行者19 小时前
MongoDB 三节点副本集离线部署运维手册
运维·数据库·mongodb
爱学习的小囧19 小时前
ESXi VMkernel 端口 MTU 最佳设置详解
运维·服务器·网络·php·虚拟化
Elastic 中国社区官方博客20 小时前
Elastic Security、Observability 和 Search 现在在你的 AI 工具中提供交互式 UI
大数据·运维·人工智能·elasticsearch·搜索引擎·安全威胁分析·可用性测试
星辰_mya21 小时前
OSI 七层模型之“跨国诈骗集团”深度讲解
运维·服务器·后端·面试·架构师
贝锐21 小时前
如何破解商用安卓无人值守运维痛点,向日葵赋能数字化高效转型
运维
齐鲁大虾21 小时前
新人编程语言选择指南
javascript·c++·python·c#
wenha1 天前
踩坑记录:UTF-8、UTF-8-BOM 与 GB2312 读取的乱码真相
utf-8·.net·编码·utf-8-bom
加号31 天前
【C#】 WebAPI 接口设计与实现指南
开发语言·c#
unicrom_深圳市由你创科技1 天前
上位机开发常用的语言 / 框架有哪些?
c++·python·c#
实心儿儿1 天前
Linux —— 基础IO - 文件描述符
linux·运维·服务器