❤️ 关注 Furion 微信公众号有惊喜哦!
🫠 遇到问题了
Skip to main content
⭐️ 开通 VIP 服务仅需 499 元/年,尊享 365 天项目无忧23 立即开通23 ⭐️
特别赞助

34.1 在 IIS 部署

精简发布文件

如果需要精简发布后的文件,也就是删除不必要的文件夹,可以编辑 Web 项目的 .csproj 并添加 <SatelliteResourceLanguages>en-US</SatelliteResourceLanguages>,如:

<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<SatelliteResourceLanguages>en-US</SatelliteResourceLanguages>
</PropertyGroup>

若无需生成 .pdb 文件,可以继续添加:

<PropertyGroup>
<DebugType>none</DebugType>
<DebugSymbols>false</DebugSymbols>
</PropertyGroup>

34.1.1 发布网站

34.1.1.1 选择启动项发布

34.1.1.2 选择发布到文件夹

34.1.1.3 配置发布后路径

34.1.1.4 点击发布

34.1.2 服务器环境配置

34.1.2.1 第一步

安装.NET Core 运行时捆绑包:点击下载

34.1.2.2 第二步(命令)

net stop was /y

34.1.2.3 第三步(命令)

net start w3svc

34.1.2.4 第四步(命令)

set ASPNETCORE_ENVIRONMENT=Production

34.1.3 部署到 IIS

34.1.3.1 添加新网站

34.1.3.2 配置网站信息

34.1.3.3 配置应用程序池

34.1.3.4 设置为 非托管

34.1.3.5 重启网站

只需重启网站或应用程序池即可。

34.1.4 常见问题

34.1.4.1 405 状态码,不支持 PUT,DELETE 请求

默认情况下,IIS拒绝 PUTDELETE 请求,原因为 IIS 默认注册了一个名为 WebDAVModule 的自定义 HttpModule 导致的。

解决该问题,只需要在 web.config 移除即可:

<configuration>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="webDAVModule"/>
</modules>
</system.webServer>
</configuration>

微软官方文档:https://docs.microsoft.com/zh-cn/troubleshoot/developer/webapps/iis/health-diagnostic-performance/http-error-405-website

34.1.4.2 WebSocket/ SignalR 连接报错

如果项目部署在 IIS 中出现 WebSoket/SignalR 不能连接或连接失败等问题,请确保 IIS 服务中的 WebSocket 协议 是勾选状态

34.1.4.3 部署之后缺失 api-ms-win.xxxx.dll 问题

有时候将发布文件发布到服务器后,出现丢失 api.ms-win.xxxx.dll 文件,这时只需要重新发布并选择服务器特定的架构即可。

34.1.5 IIS 回收问题和配置

通过 IIS 部署 .NET Core 应用程序,如果启动了系统日志,就会发现经常出现 Application is shutting down... 的日志,代表 IIS 回收了应用程序池。

对于一个长期在线的网站来说,这是非常不合理的,所以我们可以通过以下配置让 IIS 进行长时间不访问便回收的机制。


配置步骤如下:

  1. 打开 IIS 并点击左侧树根节点(计算机名称)并点击右侧的 Configuration Editor(配置编辑器)
  1. Section(节)选择 system.applicationHost/applicationPools 并设置 startModeAlwaysRunning,之后点击 Apply 保存。
  1. 点击左侧树根节点(计算机名称)下的 Application Pools 并点击最右侧的 Set Appliation Pool Defaults...(设置应用程序池默认配置...)
  1. 设置 Idle Time-out (minutes)(闲置超时(分钟)为 0

这样即可解决 IIS 回收问题。

34.1.6 卷影(无占用)复制发布替换

正常情况下如果我们代码重新发布后替换 IIS 中的文件,这时候会出现文件占用无法进行替换,过去运维人员都是先停止站点后替换再启动。但我们也可以配置 web.config 文件启用卷影复制模式实现类似热更新操作,如:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<!-- To customize the asp.net core module uncomment and edit the following section.
For more info see https://go.microsoft.com/fwlink/?linkid=838655 -->

<system.webServer>
<handlers>
<remove name="aspNetCore"/>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModulev2" resourceType="Unspecified"/>
</handlers>
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout">
<handlerSettings>
<handlerSetting name="experimentalEnableShadowCopy" value="true" />
<handlerSetting name="shadowCopyDirectory" value="../ShadowCopyDirectory/" />
<!-- Only enable handler logging if you encounter issues-->
<!--<handlerSetting name="debugFile" value=".\logs\aspnetcore-debug.log" />-->
<!--<handlerSetting name="debugLevel" value="FILE,TRACE" />-->
</handlerSettings>
</aspNetCore>
</system.webServer>
</configuration>

关于卷影复制更多知识可查看以下文档:

34.1.7 反馈与建议

与我们交流

给 Furion 提 Issue