在 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 服务器上高效、稳定地运行。

相关推荐
cen__y21 小时前
Linux11(网络编程)
linux·运维·服务器·c语言·网络·网络协议·tcp/ip
CableTech_SQH21 小时前
商业地产和高端酒店该怎么选综合布线解决方案?
运维·服务器·网络
xingyuzhisuan1 天前
哪里可以一键部署Stable Diffusion XL的GPU云环境?(2026实测指南)
运维·人工智能·stable diffusion·gpu算力
Agent手记1 天前
采购合同智能审核自动化,落地步骤与落地风险管控方案 —— 2026年企业级Agent深度实战指南
运维·人工智能·ai·自动化
Liangwei Lin1 天前
LeetCode 22. 括号生成
linux·运维·服务器
( •̀∀•́ )9201 天前
Linux 下部署 `social-auto-upload` 遇到的问题及完整解决方案
linux·运维·服务器
代码中介商1 天前
Libevent实战:高性能网络编程指南
linux·运维·网络
烛阴1 天前
Unity资源加载进化论:从AssetBundle到Addressables,一文带你吃透手游资源管理
前端·c#·unity3d
徒劳爱学仙1 天前
全志 V821 韦东山 Avaota-F1-B ubuntu开发环境搭建
linux·运维·ubuntu
冷小鱼1 天前
从 Docker 到容器编排:框架选型与指令详解实战指南
运维·docker·容器·k8s·docker compose·docker swarm