欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > C#.net core部署IIS

C#.net core部署IIS

2025/4/23 23:23:52 来源:https://blog.csdn.net/qq_46437645/article/details/147350353  浏览:    关键词:C#.net core部署IIS

Windows IIS 部署 .NET 应用详细指南

本文档提供了在 Windows Server 上使用 IIS 部署 .NET 应用(包括 .NET Core 和传统 WebForms)的完整步骤和最佳实践。

目录

  1. 概述
  2. 环境准备
  3. .NET Core 应用部署
    • 应用准备
    • 发布应用
    • 在 IIS 中配置
    • 应用池配置
    • 高级配置
  4. .NET Framework WebForms 应用部署
    • 应用准备
    • 发布应用
    • 在 IIS 中配置
    • 应用池配置
    • 高级配置
  5. 多应用部署
  6. 配置 HTTPS
  7. 性能优化
  8. 日志管理
  9. 故障排除
  10. 最佳实践
  11. 高级部署场景
  12. 特定版本部署指南
  13. 部署检查清单
  14. 结论
  15. 附录:常用命令参考

概述

.NET 应用程序有多种托管方式,而 IIS 是 Windows 环境中最常用的 Web 服务器选择。本指南涵盖了两种主要的 .NET 应用类型的部署:

  • .NET Core/.NET 5+:现代跨平台 .NET 应用框架
  • .NET Framework WebForms:传统的 Windows-only .NET 应用框架

这两种应用类型的部署流程有所不同:

  • .NET Core 应用通常是独立的(self-contained)或依赖框架的(framework-dependent)应用程序
  • WebForms 应用直接部署到 IIS 站点目录中

环境准备

Windows Server 准备

  1. 安装 Windows Server

    • 建议使用 Windows Server 2016/2019/2022
    • 安装所有最新更新
  2. 安装 IIS

    • 打开服务器管理器 → 添加角色和功能
    • 选择"Web 服务器 (IIS)"角色
    • 确保以下功能已选中:
      • Web 服务器 → 通用 HTTP 功能 → 默认文档
      • Web 服务器 → 通用 HTTP 功能 → 静态内容
      • Web 服务器 → 通用 HTTP 功能 → HTTP 错误
      • Web 服务器 → 应用程序开发 → .NET Extensibility 4.8
      • Web 服务器 → 应用程序开发 → ASP.NET 4.8
      • Web 服务器 → 应用程序开发 → ISAPI 扩展
      • Web 服务器 → 应用程序开发 → ISAPI 筛选器
      • 管理工具 → IIS 管理控制台

.NET Core 准备工作

  1. 安装 .NET Core Hosting Bundle

    • 从 Microsoft 官方网站 下载适合目标 .NET 版本的 Hosting Bundle
    • 例如,对于 .NET 6 应用,下载 .NET 6.0 Hosting Bundle
    • 运行安装程序并按照向导完成安装
  2. 安装 Visual C++ Redistributable

    • 下载并安装 Visual C++ Redistributable
    • 这是 .NET Core 运行时的依赖项
  3. IIS 配置

    • 在安装 Hosting Bundle 后,重启 IIS:
      iisreset /restart
      

.NET Framework 准备工作

  1. 安装 .NET Framework

    • 使用"添加角色和功能"向导安装 .NET Framework 4.8(或应用所需的版本)
    • 路径:服务器管理器 → 添加角色和功能 → 功能 → .NET Framework 4.8
  2. 安装 Web Deploy(可选但推荐):

    • 从 Microsoft 官方网站 下载 Web Deploy
    • 运行安装程序,选择"完整安装"选项

.NET Core 应用部署

.NET Core 应用准备

  1. 检查 .NET Core 应用要求

    • 确认目标应用兼容的 .NET 版本(.NET Core 3.1、.NET 5、.NET 6 等)
    • 确保服务器安装了匹配的 .NET 运行时
  2. 配置应用

    • appsettings.json 中设置生产环境配置:
      {"Logging": {"LogLevel": {"Default": "Information","Microsoft": "Warning","Microsoft.Hosting.Lifetime": "Information"}},"AllowedHosts": "*","ConnectionStrings": {"DefaultConnection": "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;"}
      }
      
  3. 配置 web.config

    • 在项目中添加或修改 web.config 文件:
      <?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=".\MyApplication.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" /></system.webServer></location>
      </configuration>
      

发布 .NET Core 应用

  1. 使用 Visual Studio 发布

    • 右键点击项目 → 发布
    • 选择"文件夹"作为发布目标
    • 配置发布选项:
      • 配置:Release
      • 目标框架:应用程序的目标框架(如 .NET 6.0)
      • 部署模式:根据需要选择"依赖框架"或"自包含"
      • 目标运行时:win-x64(或适合目标服务器的其他运行时)
    • 点击"发布"按钮
  2. 使用 dotnet CLI 发布

    • 打开命令提示符或 PowerShell
    • 导航到项目目录
    • 对于依赖框架的部署:
      dotnet publish -c Release -o ./publish
      
    • 对于自包含部署:
      dotnet publish -c Release -r win-x64 --self-contained -o ./publish
      
  3. 准备发布文件夹

    • 将发布输出复制到服务器上的部署文件夹,例如:
      C:\inetpub\wwwroot\MyDotNetCoreApp
      
    • 或直接在 CI/CD 流程中发布到服务器

在 IIS 中配置 .NET Core 应用

  1. 创建新应用程序池

    • 打开 IIS 管理器
    • 右键点击"应用程序池" → “添加应用程序池”
    • 名称:MyDotNetCoreAppPool
    • .NET CLR 版本:无托管代码
    • 托管管道模式:集成
    • 点击"确定"
  2. 创建网站或应用程序

    选项 1:创建新网站

    • 右键点击"网站" → “添加网站”
    • 站点名称:MyDotNetCoreApp
    • 应用程序池:选择刚创建的应用程序池
    • 物理路径:指向发布文件夹(例如 C:\inetpub\wwwroot\MyDotNetCoreApp
    • 绑定:设置 HTTP 绑定(端口、主机名等)
    • 点击"确定"

    选项 2:在现有网站下添加应用程序

    • 右键点击现有网站 → “添加应用程序”
    • 别名:MyDotNetCoreApp
    • 应用程序池:选择刚创建的应用程序池
    • 物理路径:指向发布文件夹
    • 点击"确定"
  3. 设置目录权限

    • 右键点击应用程序物理路径 → “属性” → “安全” → “编辑”
    • 添加 IIS_IUSRS 用户组和应用程序池身份(例如 IIS AppPool\MyDotNetCoreAppPool
    • 至少授予"读取和执行"、“列出文件夹内容”、"读取"权限
    • 对于需要写入的目录(如日志目录),授予"修改"权限
    • 点击"确定"应用更改

.NET Core 应用池配置

  1. 配置应用程序池高级设置

    • 右键点击应用程序池 → “高级设置”
    • 设置"启用32位应用程序"为"False"(对于 64 位应用)
    • 可根据需要调整其他设置(如闲置超时、回收等)
    • 点击"确定"
  2. 配置 ASP.NET Core 模块

    • web.config 中可以配置 ASP.NET Core 模块的行为:
      <aspNetCore processPath="dotnet" arguments=".\MyApplication.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
      
    • hostingModel 可以是 inprocess(默认,性能更好)或 outofprocess(隔离性更好)

.NET Core 高级配置

  1. 配置 URL 重写(如果需要):

    • 安装 URL Rewrite 模块(如果尚未安装)
    • 配置 web.config 以包含 URL 重写规则:
      <system.webServer><rewrite><rules><rule name="Redirect to HTTPS" stopProcessing="true"><match url="(.*)" /><conditions><add input="{HTTPS}" pattern="^OFF$" /></conditions><action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" /></rule></rules></rewrite>
      </system.webServer>
      
  2. 配置应用程序初始化(预热):

    • web.config 中添加配置:
      <system.webServer><applicationInitialization doAppInitAfterRestart="true"><add initializationPage="/" /></applicationInitialization>
      </system.webServer>
      
    • 在站点或应用程序的高级设置中设置"预加载已启用"为"True"
  3. 配置环境变量

    • 在 web.config 中设置环境变量:
      <aspNetCore processPath="dotnet" arguments=".\MyApplication.dll"><environmentVariables><environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" /><environmentVariable name="ConnectionStrings__DefaultConnection" value="Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;" /></environmentVariables>
      </aspNetCore>
      

.NET Framework WebForms 应用部署

WebForms 应用准备

  1. 检查 .NET Framework 版本

    • 确认应用程序的目标 .NET Framework 版本(例如 4.0、4.5、4.8)
    • 确保服务器已安装该版本
  2. 配置 Web.config

    • 确保 Web.config 文件中的连接字符串和应用设置适合生产环境:
      <configuration><connectionStrings><add name="DefaultConnection" connectionString="Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;" providerName="System.Data.SqlClient" /></connectionStrings><appSettings><add key="Environment" value="Production" /></appSettings><!-- 其他配置 -->
      </configuration>
      
  3. 准备应用程序文件

    • 确保所有必要的依赖项和引用都已包含在项目中
    • 确保所有路径都是相对路径,以便在部署环境中正常工作

发布 WebForms 应用

  1. 使用 Visual Studio 发布

    • 右键点击项目 → 发布
    • 选择发布方法:
      • Web Deploy:直接发布到 IIS(需要安装 Web Deploy)
      • FTP:通过 FTP 发布
      • 文件系统:发布到本地文件夹
    • 配置发布参数:
      • 对于 Web Deploy:输入服务器 URL、站点名称、用户名和密码
      • 对于文件系统:选择输出文件夹
    • 配置发布选项:
      • 配置:Release
      • 文件发布选项:视需要选择"删除目标位置中的其他文件"
    • 点击"发布"按钮
  2. 手动发布

    • 生成 Release 版本的应用程序
    • 复制 binApp_DataApp_Themes 及其他必要文件夹
    • 复制所有 .aspx.ascx.master 文件
    • 复制 Web.config 和其他配置文件
    • 将文件复制到服务器上的部署文件夹

在 IIS 中配置 WebForms 应用

  1. 创建新应用程序池

    • 打开 IIS 管理器
    • 右键点击"应用程序池" → “添加应用程序池”
    • 名称:MyWebFormsAppPool
    • .NET CLR 版本:.NET CLR v4.0.30319 (或应用程序所需的 .NET Framework 版本)
    • 托管管道模式:集成
    • 点击"确定"
  2. 创建网站或应用程序

    选项 1:创建新网站

    • 右键点击"网站" → “添加网站”
    • 站点名称:MyWebFormsApp
    • 应用程序池:选择刚创建的应用程序池
    • 物理路径:指向部署文件夹(例如 C:\inetpub\wwwroot\MyWebFormsApp
    • 绑定:设置 HTTP 绑定(端口、主机名等)
    • 点击"确定"

    选项 2:在现有网站下添加应用程序

    • 右键点击现有网站 → “添加应用程序”
    • 别名:MyWebFormsApp
    • 应用程序池:选择刚创建的应用程序池
    • 物理路径:指向部署文件夹
    • 点击"确定"
  3. 设置目录权限

    • 右键点击应用程序物理路径 → “属性” → “安全” → “编辑”
    • 添加 IIS_IUSRS 用户组和应用程序池身份(例如 IIS AppPool\MyWebFormsAppPool
    • 至少授予"读取和执行"、“列出文件夹内容”、"读取"权限
    • 对于特殊文件夹如 App_Data,授予"修改"权限
    • 点击"确定"应用更改

WebForms 应用池配置

  1. 配置应用程序池高级设置

    • 右键点击应用程序池 → “高级设置”
    • 根据应用程序要求,设置"启用32位应用程序"为"True"或"False"
    • 配置回收设置:
      • 定期回收间隔:根据应用需求调整(0 表示禁用定期回收)
      • 闲置超时:如果需要保持应用程序在内存中,设置较长的时间
    • 点击"确定"
  2. 配置应用程序池身份

    • 默认情况下,应用程序池使用 ApplicationPoolIdentity
    • 如果需要,可以设置为特定用户:
      • 高级设置 → 进程模型 → 标识 → 自定义账户
      • 输入一个具有足够权限的域或本地用户账户

WebForms 高级配置

  1. 配置会话状态
    Web.config 中配置会话状态模式:

    <system.web><sessionState mode="StateServer" stateConnectionString="tcpip=localhost:42424" timeout="20" /><!-- 或者使用 SQL Server --><!-- <sessionState mode="SQLServer" sqlConnectionString="..." timeout="20" /> -->
    </system.web>
    
  2. 配置自定义错误页

    <system.web><customErrors mode="RemoteOnly" defaultRedirect="~/Error.aspx"><error statusCode="404" redirect="~/NotFound.aspx" /><error statusCode="500" redirect="~/ServerError.aspx" /></customErrors>
    </system.web>
    
  3. 配置应用程序预热

    • 安装 Application Initialization 模块(如果尚未安装)
    • 在站点或应用程序的高级设置中设置"预加载已启用"为"True"
    • Web.config 中添加:
      <system.webServer><applicationInitialization doAppInitAfterRestart="true"><add initializationPage="/" hostName="example.com" /></applicationInitialization>
      </system.webServer>
      

多应用部署

管理多个 .NET 应用

  1. 使用单独的应用程序池

    • 为每个应用程序创建独立的应用程序池
    • 确保应用程序池的 .NET CLR 版本与应用程序兼容
  2. 域名和子域部署

    • 配置多个站点,每个使用不同的域名或子域
    • 在 IIS 中添加多个绑定,每个绑定使用不同的主机名
  3. 子应用程序部署

    • 在主网站下添加多个应用程序
    • 每个应用程序使用自己的应用程序池
    • 配置适当的虚拟路径
  4. 管理资源分配

    • 为不同的应用程序池分配不同的资源限制(内存、CPU 等)
    • 配置高级应用程序池设置以优化性能

配置 HTTPS

设置 SSL/TLS

  1. 获取 SSL 证书

    • 从证书颁发机构购买证书
    • 使用 Let’s Encrypt 免费证书
    • 创建自签名证书(仅适用于开发/测试环境)
  2. 安装证书

    • 打开 IIS 管理器 → 选择服务器 → “服务器证书”
    • 点击"导入"(如果已有 PFX 文件)或"创建证书请求"(如果需要申请新证书)
    • 按照向导完成证书导入或请求
  3. 配置 HTTPS 绑定

    • 选择网站 → “绑定…” → “添加”
    • 类型:选择"https"
    • IP 地址:选择适当的 IP 地址或"全部未分配"
    • 端口:通常为 443
    • 主机名:输入域名(可选)
    • SSL 证书:选择已安装的证书
    • 点击"确定"
  4. 配置 HTTP 到 HTTPS 重定向

    • 安装 URL Rewrite 模块(如果尚未安装)
    • 添加重写规则将 HTTP 请求重定向到 HTTPS:
      <system.webServer><rewrite><rules><rule name="HTTP to HTTPS" stopProcessing="true"><match url="(.*)" /><conditions><add input="{HTTPS}" pattern="^OFF$" /></conditions><action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" /></rule></rules></rewrite>
      </system.webServer>
      
  5. 配置 HSTS(HTTP 严格传输安全):

    • 添加 HTTP 响应头:
      <system.webServer><httpProtocol><customHeaders><add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains" /></customHeaders></httpProtocol>
      </system.webServer>
      

性能优化

IIS 性能调优

  1. 启用压缩

    • 打开 IIS 管理器 → 选择服务器 → “压缩”
    • 勾选"启用静态内容压缩"和"启用动态内容压缩"
    • 配置压缩级别和其他设置
  2. 启用输出缓存

    • 选择网站或应用程序 → “输出缓存”
    • 添加缓存规则以缓存静态内容和不经常变化的动态内容
  3. 优化应用程序池

    • 配置应用程序池回收设置以减少不必要的回收
    • 使用应用程序预热确保快速响应
    • 根据服务器资源分配适当的进程数量

.NET 应用性能优化

  1. .NET Core 性能优化

    • 在发布时使用 --configuration Release 选项
    • 使用响应压缩中间件:
      app.UseResponseCompression();
      
    • 实现缓存策略:
      services.AddResponseCaching();
      app.UseResponseCaching();
      
  2. WebForms 性能优化

    • Web.config 中启用输出缓存:
      <system.web><caching><outputCache enableOutputCache="true" /><outputCacheSettings><outputCacheProfiles><add name="CacheFor1Minute" duration="60" varyByParam="none" /></outputCacheProfiles></outputCacheSettings></caching>
      </system.web>
      
    • 使用页面输出缓存:
      <%@ OutputCache Duration="60" VaryByParam="none" %>
      
    • 优化视图状态大小:
      <%@ Page EnableViewState="false" %>
      

日志管理

配置 IIS 日志

  1. 配置 IIS 站点日志

    • 选择网站 → “日志记录”
    • 配置日志文件格式(W3C 扩展、IIS、NCSA 或自定义)
    • 设置日志文件路径和轮换选项
    • 选择需要记录的字段
  2. 配置 FREB 日志(失败请求跟踪):

    • 选择网站或应用程序 → “失败请求跟踪规则”
    • 添加新规则,指定触发日志记录的条件(如状态码、时间等)
    • 配置要包含在日志中的详细信息

配置应用程序日志

  1. .NET Core 日志配置

    • appsettings.json 中配置日志记录:
      {"Logging": {"LogLevel": {"Default": "Information","Microsoft": "Warning","Microsoft.Hosting.Lifetime": "Information"},"File": {"Path": "logs/app.log","FileSizeLimitBytes": 10485760,"MaxRollingFiles": 10}}
      }
      
    • 使用第三方日志记录库如 Serilog 或 NLog 进行高级日志配置
  2. WebForms 日志配置

    • 使用 web.config 配置健康监视和跟踪:
      <system.web><healthMonitoring enabled="true"><!-- 健康监视配置 --></healthMonitoring><trace enabled="true" localOnly="true" />
      </system.web>
      
    • 使用 log4net 或其他日志库进行应用程序级日志记录

故障排除

常见 IIS 错误

  1. HTTP 500.19 - Internal Server Error

    • 通常是 web.config 配置错误
    • 检查配置文件语法
    • 确保服务器已安装所有必要的 IIS 模块
  2. HTTP 500.21 - Internal Server Error

    • 通常是 .NET Core/.NET 5+ 处理程序映射或模块问题
    • 确认已安装 ASP.NET Core Hosting Bundle
    • 检查 web.config 中的处理程序配置
  3. HTTP 503 - Service Unavailable

    • 应用程序池可能已停止
    • 检查应用程序池状态
    • 查看事件日志中的应用程序崩溃或其他问题

.NET Core 应用排错

  1. 检查日志

    • 检查 stdoutLogFile 指定的位置
    • 检查 Windows 事件日志
    • 检查应用程序自定义日志
  2. 检查模块安装

    • 确认 ASP.NET Core 模块已正确安装和注册
    • 在命令行运行 dotnet --info 确认 .NET 运行时版本
  3. 检查进程

    • 使用任务管理器或 Process Explorer 确认 w3wp.exe(应用程序池)和 dotnet.exe(对于 out-of-process 托管)进程正在运行

WebForms 应用排错

    • 启用详细错误消息

      • 配置 customErrors 模式:

        <system.web><customErrors mode="Off" />
        </system.web>
        
      • 查看详细错误输出

    • 检查脚本错误

      • 使用浏览器开发者工具检查 JavaScript 错误
      • 配置 <deployment retail="false"> 以获取详细错误信息
    • 检查权限

      • 确保应用程序池身份有权访问所有必要的资源(文件、数据库等)
      • 为 App_Data 目录授予修改权限
      • 确保任何外部资源(如 UNC 路径、外部 API)的权限正确
    • 检查数据库连接

      • 验证连接字符串是否正确
      • 确保数据库服务器可访问
      • 检查数据库用户权限

    最佳实践

    安全最佳实践

    1. 保持系统更新

      • 定期安装 Windows 更新
      • 更新 .NET Framework、.NET Core 运行时到最新的安全补丁版本
      • 保持 IIS 和其模块的最新状态
    2. 应用安全配置

      • 配置适当的 web.config 安全设置:

        <system.web><httpRuntime enableVersionHeader="false" /><httpCookies httpOnlyCookies="true" requireSSL="true" />
        </system.web>
        
      • 配置安全 HTTP 头:

        <system.webServer><httpProtocol><customHeaders><remove name="X-Powered-By" /><add name="X-Frame-Options" value="SAMEORIGIN" /><add name="X-XSS-Protection" value="1; mode=block" /><add name="X-Content-Type-Options" value="nosniff" /></customHeaders></httpProtocol>
        </system.webServer>
        
    3. 实施身份验证和授权

      • 使用安全的身份验证机制(如 ASP.NET Identity、Windows 认证)
      • 配置适当的授权策略
      • 考虑实施 2FA(双因素认证)
    4. 保护敏感数据

      • 加密连接字符串和敏感配置信息
      • 使用 HTTPS 加密传输中的数据
      • 适当实施数据保护 API

    部署最佳实践

    1. 实施 CI/CD 流程

      • 使用 Azure DevOps、GitHub Actions 或其他 CI/CD 工具自动化部署
      • 实施部署前的自动化测试
      • 使用 Web Deploy 或其他部署工具进行零停机部署
    2. 版本控制部署文件夹

      • 使用带时间戳的文件夹命名约定
      • 保留多个版本以便快速回滚
      • 使用符号链接指向当前活动版本
    3. 应用配置转换

      • 使用 XML 配置转换针对不同环境(如开发、测试、生产)
      • 使用环境变量或其他安全方式存储敏感配置
    4. 使用蓝绿部署或金丝雀发布

      • 设置两个相同的环境进行蓝绿部署
      • 将一小部分流量路由到新版本进行金丝雀测试

    监控和维护最佳实践

    1. 设置监控

      • 使用 Application Insights、New Relic 或类似工具监控应用性能
      • 设置警报以通知异常情况
      • 定期检查应用程序和 IIS 日志
    2. 定期备份

      • 备份网站内容和配置
      • 备份 IIS 配置(使用 appcmd 或导出功能)
      • 备份 SSL 证书和其他安全凭据
    3. 定期维护

      • 定期清理日志文件
      • 优化数据库(如适用)
      • 检查和优化应用程序池回收设置
    4. 灾难恢复计划

      • 制定完整的灾难恢复流程
      • 定期测试恢复流程
      • 保持离线文档和关键信息

    高级部署场景

    负载均衡和高可用性

    1. 配置 Web 场

      • 设置多个运行相同应用程序的 Web 服务器
      • 使用 ARR(Application Request Routing)或硬件负载均衡器分配流量
      • 确保会话状态在服务器之间共享
    2. 配置共享内容

      • 使用 DFS(分布式文件系统)或共享存储
      • 确保所有 Web 场服务器都可访问共享内容
      • 适当配置 ACL(访问控制列表)
    3. 配置粘性会话(如需要):

      • 在 ARR 中配置服务器亲和性
      • 或使用分布式缓存如 Redis 进行会话存储

    容器化部署

    1. 使用 Docker 容器

      • 为 .NET Core/.NET 5+ 应用创建 Dockerfile
      • 使用 Windows 容器或 Linux 容器(取决于应用程序要求)
      • 配置容器编排(如 Kubernetes)
    2. 配置 IIS 反向代理

      • 在容器环境前使用 IIS 作为反向代理
      • 配置 URL 重写规则将请求路由到容器
    3. 使用 Windows Container Networking

      • 配置容器网络以允许容器间通信
      • 确保容器可访问必要的外部资源(如数据库)

    微服务架构部署

    1. 服务发现

      • 使用服务注册表(如 Consul、Eureka)
      • 配置 API 网关路由请求到不同服务
    2. 独立部署

      • 为每个微服务配置独立的 IIS 站点或应用程序
      • 使用不同的应用程序池隔离服务
    3. 监控和日志聚合

      • 集中收集和分析所有微服务的日志
      • 实施分布式跟踪以监控请求流

    特定版本部署指南

    .NET 6/7/8 应用部署

    1. 安装最新 Hosting Bundle

      • 从 Microsoft 下载并安装对应版本的 .NET Hosting Bundle
      • 例如,对于 .NET 8 应用,安装 .NET 8.0 Hosting Bundle
    2. 配置特定功能

      • 配置最小 API 和其他 .NET 6+ 新功能的 IIS 集成
      • 使用最新的部署模式(如自包含部署、单文件发布)
    3. 优化性能

      • 使用 .NET 6+ 的性能增强功能
      • 配置 Kestrel 设置以优化 in-process 和 out-of-process 模式

    .NET Framework 4.8 应用部署

    1. 安装 .NET Framework 4.8

      • 在服务器上安装完整的 .NET Framework 4.8
      • 安装相关的安全补丁和更新
    2. 配置传统功能

      • 配置 Classic ASP.NET 功能(如会话状态、视图状态)
      • 适当设置应用程序池回收和 ASP.NET 并发设置
    3. 兼容性考虑

      • 处理任何遗留组件的兼容性问题
      • 确保在 4.8 环境中测试所有功能

    部署检查清单

    .NET Core/.NET 5+ 部署检查清单

    1. 前期准备

      • 安装了适当版本的 .NET Hosting Bundle
      • 安装了必要的 IIS 功能和模块
      • 安装了 Visual C++ Redistributable
    2. 应用程序构建

      • 使用正确的配置(Release)构建应用
      • 配置了适当的运行时(依赖框架或自包含)
      • 测试构建的发布包在本地运行正常
    3. IIS 配置

      • 创建了应用程序池(无托管代码)
      • 创建了网站或应用程序
      • 设置了正确的目录权限
      • 配置了 web.config 文件
    4. 测试和监控

      • 从外部客户端测试应用程序
      • 检查日志确认没有错误
      • 设置了监控和警报

    WebForms 部署检查清单

    1. 前期准备

      • 服务器安装了正确版本的 .NET Framework
      • 安装了必要的 IIS 功能和模块
      • 安装了 Web Deploy(如使用)
    2. 应用程序构建

      • 使用正确的 Web.config 转换
      • 移除了开发工具和调试符号
      • 确保所有依赖项都已包含
    3. IIS 配置

      • 创建了应用程序池(正确的 .NET CLR 版本)
      • 创建了网站或应用程序
      • 设置了正确的目录权限
      • 配置了应用程序池高级设置
    4. 测试和监控

      • 测试所有关键功能
      • 验证数据库连接和其他集成
      • 检查日志确认没有错误

    结论

    在 Windows IIS 上部署 .NET 应用程序需要仔细规划和配置。无论是现代的 .NET Core/.NET 5+ 应用还是传统的 WebForms 应用,本指南提供了全面的步骤和最佳实践,帮助您成功部署和维护高性能、安全的 Web 应用程序。

    通过遵循本指南中的步骤和最佳实践,您可以确保应用程序的可靠性、性能和安全性,同时简化未来的维护和升级过程。

    附录:常用命令参考

    IIS 命令行工具 (appcmd)

    # 列出所有站点
    %windir%\system32\inetsrv\appcmd list site# 列出所有应用程序池
    %windir%\system32\inetsrv\appcmd list apppool# 重启应用程序池
    %windir%\system32\inetsrv\appcmd recycle apppool /apppool.name:"MyAppPool"# 启动/停止站点
    %windir%\system32\inetsrv\appcmd start site /site.name:"MySite"
    %windir%\system32\inetsrv\appcmd stop site /site.name:"MySite"# 备份 IIS 配置
    %windir%\system32\inetsrv\appcmd add backup "MyBackup"# 恢复 IIS 配置
    %windir%\system32\inetsrv\appcmd restore backup "MyBackup"
    

    PowerShell IIS 命令 (WebAdministration)

    # 导入 IIS 模块
    Import-Module WebAdministration# 列出所有站点
    Get-Website# 列出所有应用程序池
    Get-ChildItem IIS:\AppPools\# 重启应用程序池
    Restart-WebAppPool -Name "MyAppPool"# 启动/停止站点
    Start-Website -Name "MySite"
    Stop-Website -Name "MySite"# 创建新站点
    New-Website -Name "NewSite" -PhysicalPath "C:\inetpub\wwwroot\newsite" -ApplicationPool "NewSiteAppPool"# 创建新应用程序池
    New-WebAppPool -Name "NewAppPool"
    

    .NET CLI 命令

    # 发布 .NET Core 应用 (Framework-dependent)
    dotnet publish -c Release -o ./publish# 发布 .NET Core 应用 (Self-contained)
    dotnet publish -c Release -r win-x64 --self-contained -o ./publish# 运行应用(测试)
    dotnet run# 查看安装的 .NET 版本
    dotnet --info
    

    Web Deploy 命令

    # 打包 Web 应用程序
    msdeploy -verb:sync -source:iisApp="C:\inetpub\wwwroot\myapp" -dest:package=C:\temp\myapp.zip# 部署 Web 应用程序
    msdeploy -verb:sync -source:package=C:\temp\myapp.zip -dest:iisApp="Default Web Site/myapp" -skip:objectName=filePath,absolutePath=".+\\.config$" -enableRule:DoNotDeleteRule# 同步两个 IIS 站点
    msdeploy -verb:sync -source:iisApp="Default Web Site/source" -dest:iisApp="Default Web Site/destination"
    

    IIS 诊断命令

    # 检查 IIS 状态
    iisreset /status# 启动 IIS
    iisreset /start# 停止 IIS
    iisreset /stop# 重启 IIS
    iisreset /restart# 检查 ASP.NET 注册情况
    %windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis -lv# 重新注册 ASP.NET
    %windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis -i
    

    .NET Core 诊断命令

    # 检查 .NET Core 运行时安装
    dotnet --info# 验证 .NET Core 应用
    dotnet --verify myapplication.dll# 列出所有已安装的 .NET Core runtimes
    dotnet --list-runtimes# 检查 ASP.NET Core 模块安装
    %windir%\System32\inetsrv\appcmd list modules /module.name:"AspNetCoreModuleV2"
    

    性能监控命令

    # 监视 IIS Worker 进程
    Get-Process w3wp | Select-Object Id, ProcessName, @{Name="AppPool";Expression={(Get-WmiObject Win32_Process -Filter "ProcessId='$($_.Id)'").CommandLine -match "[-]ap[p]pool[:]([^\s]*)";$matches[1]}}, @{Name="Threads";Expression={$_.Threads.Count}}, @{Name="Memory";Expression={[Math]::Round($_.WorkingSet64/1MB,2)}}# 获取 IIS 性能计数器
    Get-Counter -Counter "\Web Service(_Total)\Current Connections"
    Get-Counter -Counter "\ASP.NET Applications(__Total__)\Requests/Sec"
    Get-Counter -Counter "\ASP.NET\Requests Queued"
    

    附录:IIS 常见故障排除参考

    HTTP 错误代码排错参考

    错误代码常见原因排查方向
    500应用程序错误检查应用程序错误日志、调试模式查看详细信息
    500.19配置错误检查 web.config 语法、确认模块安装
    500.21模块未安装安装必要的模块(如 ASP.NET Core Module)
    502.5进程故障检查应用程序能否独立运行,检查权限
    503应用程序池不可用检查应用程序池状态,查看事件日志
    404资源不存在检查路径、URL 重写规则、路由配置
    401未授权检查认证设置、用户权限
    403禁止访问检查文件/目录权限、IP 限制、URL 授权

    事件日志位置

    • 应用程序事件日志: 在 Windows 事件查看器中,Windows Logs -> Application
    • IIS 日志: 默认位置 %SystemDrive%\inetpub\logs\LogFiles
    • .NET Core 标准输出日志: 在 web.config 中由 stdoutLogFile 属性指定
    • ASP.NET 应用程序日志: 由应用程序配置决定,通常在 App_Data 或专用日志目录

    故障排除工具

    1. Failed Request Tracing (FREB):

      • 配置详细的请求跟踪,记录请求处理的每一步
      • 可用于诊断复杂的 IIS 和应用程序交互问题
    2. Process Monitor:

      • 监控文件系统、注册表和进程活动
      • 用于诊断权限问题和资源访问问题
    3. Process Explorer:

      • 详细查看进程信息、加载的模块和线程
      • 分析应用程序池进程问题
    4. Debug Diagnostic Tool:

      • 分析内存转储和应用程序崩溃
      • 诊断内存泄漏和性能问题
    5. Network Monitor:

      • 分析网络流量
      • 诊断与外部资源的连接问题

    模块检测命令

    # 检查 URL Rewrite 模块
    %windir%\System32\inetsrv\appcmd list modules /module.name:"RewriteModule"# 检查 ASP.NET Core 模块
    %windir%\System32\inetsrv\appcmd list modules /module.name:"AspNetCoreModuleV2"# 检查应用程序初始化模块
    %windir%\System32\inetsrv\appcmd list modules /module.name:"ApplicationInitializationModule"# 列出所有已安装的模块
    %windir%\System32\inetsrv\appcmd list modules
    

    安全性检查工具

    1. IIS Crypto:

      • 配置 SSL/TLS 设置
      • 实施安全最佳实践
    2. Security Compliance Manager:

      • 应用安全基线
      • 验证 IIS 和 Windows 设置
    3. URL Scan:

      • 过滤恶意请求
      • 加强 IIS 安全性

    通过掌握这些工具和命令,您将能够更有效地诊断和解决 IIS 中的 .NET 应用程序部署问题。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词