VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > c#编程 >
  • C#中关于部署到IIS——Web应用发布

第三部分:Web应用开发
10. 部署到IIS——Web应用发布
实例介绍
之前做电商后台部署时,踩了无数坑:用“框架依赖”发布但服务器没装对应版本的.NET运行时,导致网站启动失败;应用程序池选了“.NET CLR版本”而不是“无托管代码”,报500.19错误;Swagger在生产环境还能访问,泄露了API结构;网站权限没配置,导致数据库连接失败。后来按照规范流程部署:先装IIS和.NET托管捆绑包,用“框架依赖+win-x64”发布,配置应用程序池为“无托管vb.net教程C#教程python教程SQL教程access 2010教程
代码”,给网站目录加IIS_IUSRS权限,生产环境关闭Swagger,终于一次部署成功。这节就带你从零开始部署ASP.NET Core Web API到IIS,覆盖所有关键步骤,避开常见坑。
需求分析
部署到IIS要解决“环境配置、正确发布、IIS站点配置、权限设置、生产环境安全、问题排查”的问题,具体需求如下:
1.服务器环境准备:安装IIS、.NET Core托管捆绑包(包含运行时和ANCM模块);
2.项目正确发布:选择合适的发布模式(框架依赖/自包含),目标运行时与服务器一致;
3.IIS站点配置:新建网站、应用程序池,设置正确的物理路径、端口、应用程序池属性;
4.权限设置:给网站目录添加IIS_IUSRS权限,确保应用能读取文件、连接数据库;
5.生产环境安全:关闭Swagger、启用HTTPS、配置防火墙规则;
6.性能优化:设置应用程序池“始终运行”,避免冷启动延迟;
7.日志配置:开启stdout日志,方便排查启动失败、运行时错误;
8.问题排查:快速定位500.19、502.5等常见错误;
9.更新部署:零停机更新网站,避免影响用户;
10.多环境部署:区分开发、测试、生产环境的配置(如数据库连接字符串)。
代码实现
前置条件:Windows Server 2019+ 或 Windows 10/11(支持IIS 10+);Visual Studio 2022+;已完成ASP.NET Core Web API项目开发。
场景1:服务器环境准备(安装IIS和.NET托管捆绑包)
先在服务器上安装必要的环境,确保能运行ASP.NET Core应用。
步骤1:安装IIS
1.打开控制面板 → 程序 → 启用或关闭Windows功能;
2.勾选Internet Information Services及其所有子项(重点是“Web管理工具”和“万维网服务”);
3.点击“确定”,等待安装完成,重启服务器(可选)。
步骤2:安装.NET Core托管捆绑包
托管捆绑包包含.NET Core运行时、ASP.NET Core模块(ANCM),是IIS部署的核心组件:
1.下载对应版本的托管捆绑包:.NET 下载页面;
1.选择与项目目标框架一致的版本(如项目用.NET 6,就下载.NET 6的托管捆绑包);
2.下载“Hosting Bundle”(不是单独的Runtime);
2.运行安装包,勾选“同意条款”,点击“安装”;
3.安装完成后,重启IIS服务:
打开命令提示符(管理员),执行:
bash

	net stop was /y
	net start w3svc

场景2:项目发布(Visual Studio 发布向导)
用Visual Studio的发布向导,将项目发布到本地文件夹,再复制到服务器。
步骤1:打开发布向导
1.右键项目 → 选择“发布”;
2.选择“文件系统”作为发布目标,点击“下一步”;
3.设置“目标位置”(如D:PublishECommerceWeb),点击“完成”。
步骤2:配置发布设置
1.点击“显示所有设置”,展开详细配置:
1.配置:选择Release(生产环境);
2.目标框架:选择与项目一致的版本(如net6.0);
3.部署模式:
1.框架依赖:体积小(仅几百MB),需服务器安装对应版本的.NET运行时(推荐);
2.自包含:体积大(几GB),包含.NET运行时,服务器无需安装运行时;
4.目标运行时:选择win-x64(服务器是64位系统);
5.文件发布选项:勾选“在发布前删除所有现有文件”(避免旧文件残留);
2.点击“保存”,然后点击“发布”;
3.发布完成后,检查目标文件夹是否有以下文件:
1.ECommerceWeb.dll:应用程序主文件;
2.web.config:IIS配置文件(自动生成);
3.appsettings.json:配置文件;
4.wwwroot(如果有前端静态文件)。
场景3:IIS站点配置(新建网站和应用程序池)
在IIS中新建网站,配置应用程序池,确保应用能正常运行。
步骤1:新建应用程序池
1.打开IIS管理器(开始菜单搜索“IIS”);
2.展开左侧服务器节点,右键“应用程序池” → “添加应用程序池”;
3.配置应用程序池:
1.名称:ECommerceWebPool(自定义,建议与网站名称一致);
2..NET CLR版本:选择无托管代码(关键!ASP.NET Core自己运行Kestrel,不需要IIS托管);
3.托管管道模式:集成;
4.点击“确定”;
4.右键新建的应用程序池 → “高级设置”:
1.启动模式:选择始终运行(避免冷启动延迟);
2.闲置超时(分钟):设置为0(不自动回收应用池);
3.进程模型 → 标识:选择ApplicationPoolIdentity(默认,权限足够)。
步骤2:新建网站
1.右键“网站” → “添加网站”;
2.配置网站:
1.网站名称:ECommerceWeb;
2.应用程序池:选择刚才新建的ECommerceWebPool;
3.物理路径:选择发布后的文件夹(如D:PublishECommerceWeb);
4.绑定:
1.类型:http,IP地址:全部未分配,端口:8080(避免与默认80端口冲突);
2.若有域名,可设置“主机名”(如api.example.com);
5.点击“确定”。
步骤3:配置网站权限
1.右键发布后的文件夹 → “属性” → “安全”选项卡;
2.点击“编辑” → “添加”,输入IIS_IUSRS,点击“检查名称” → “确定”;
3.给IIS_IUSRS分配“读取和执行”、“列出文件夹内容”、“读取”权限;
4.点击“确定”保存。
场景4:生产环境安全与性能优化
配置生产环境的安全设置,关闭不必要的功能,优化性能。
步骤1:关闭Swagger(Program.cs)
只在开发环境启用Swagger,生产环境隐藏:
csharp

	if (app.Environment.IsDevelopment())
	{
	app.UseSwagger();
	app.UseSwaggerUI();
	}
	// 生产环境不启用Swagger

步骤2:启用HTTPS(可选)
1.申请SSL证书(如Let's Encrypt免费证书);
2.在IIS网站绑定中添加https类型,选择证书,端口设置为443;
3.强制HTTPS跳转:在web.config中添加重写规则:
xml

	<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>

步骤3:配置stdout日志(web.config)
开启日志,方便排查启动失败、运行时错误:
xml

	<aspNetCore processPath="dotnet" arguments=".ECommerceWeb.dll" stdoutLogEnabled="true" stdoutLogFile=".logsstdout" hostingModel="inprocess">
	</aspNetCore>
stdoutLogEnabled="true":开启日志;
stdoutLogFile=".logsstdout":日志存储路径(需手动创建logs文件夹);
hostingModel="inprocess":IIS进程内托管(性能更好),也可设为outofprocess(进程外,更稳定)。

步骤4:防火墙设置
如果服务器有防火墙,开放网站端口(如8080、443):
1.打开“Windows Defender防火墙” → “高级设置”;
2.右键“入站规则” → “新建规则”;
3.选择“端口” → 输入端口号(如8080) → 允许连接 → 勾选“域”、“专用”、“公网” → 命名规则(如ECommerceWeb-8080)。
场景5:零停机更新部署
更新网站时,避免用户访问中断,实现零停机更新。
步骤1:使用应用程序池回收
1.发布新版本到临时文件夹(如D:PublishECommerceWeb-New);
2.停止网站(IIS管理器 → 右键网站 → “停止”);
3.替换旧文件夹的文件(或直接修改物理路径为新文件夹);
4.启动网站 → 右键应用程序池 → “回收”(避免缓存问题)。
步骤2:使用蓝绿部署(进阶)
1.新建一个网站(如ECommerceWeb-Blue),使用不同端口(如8081);
2.部署新版本到蓝网站,验证正常;
3.修改负载均衡器(或IIS绑定),将流量切换到蓝网站;
4.停止旧网站(绿网站),完成更新。
逐行讲解
场景3:IIS配置核心细节
1.应用程序池“无托管代码”:
oASP.NET Core应用自己运行Kestrel服务器,IIS只是反向代理,不需要加载.NET CLR环境;
o如果选择“.NET CLR版本”,会导致IIS尝试托管.NET Core代码,报500.19错误;
2.网站权限设置:
oIIS_IUSRS是IIS的内置用户组,拥有读取网站文件的权限;
o如果应用需要写入文件(如上传图片),还需给IIS_IUSRS分配“写入”权限;
3.web.config关键字段:
oprocessPath="dotnet":指定运行.NET应用的命令(框架依赖发布时用);
oarguments=".ECommerceWeb.dll":指定应用程序主文件;
ohostingModel="inprocess":进程内托管,性能比进程外高30%左右;
场景4:生产环境安全核心细节
1.关闭Swagger:
oSwagger文档包含所有接口的参数、返回格式,生产环境暴露会有安全风险;
o若需在生产环境调试,可通过配置文件控制(如appsettings.Production.json中设置Swagger:Enabled=false);
2.启用HTTPS:
oHTTPS加密传输数据,防止中间人攻击;
o现在主流浏览器都强制要求HTTPS,否则会标记网站为“不安全”;
3.stdout日志:
o当应用启动失败时,IIS的错误日志可能不详细,stdout日志会记录应用的启动过程、异常信息;
o上线后建议开启,方便快速定位问题;
基础知识拓展

  1. 框架依赖 vs 自包含发布对比
特性 框架依赖 自包含
体积 小(几百MB) 大(几GB)
服务器要求 需安装对应版本的.NET运行时 无需安装.NET运行时
更新 仅更新应用文件,无需更新运行时 需重新发布整个应用
性能 略低(需加载全局运行时) 略高(运行时与应用绑定)
兼容性 需服务器运行时版本与发布版本一致 不依赖服务器运行时,兼容性更好
  1. 常见错误及解决方案
错误代码 原因 解决方案
500.19 - Internal Server Error web.config配置错误,或IIS缺少ANCM模块 1. 检查web.config格式;2. 安装.NET托管捆绑包;3. 确保应用程序池是“无托管代码”
502.5 - Process Failure 应用启动失败(如缺少依赖、配置错误、权限不足) 1. 查看stdout日志;2. 检查数据库连接字符串;3. 确保网站目录有IIS_IUSRS权限
404 - Not Found 接口路径错误,或应用未正确启动 1. 检查接口URL;2. 查看应用程序池是否启动;3. 检查stdout日志
403 - Forbidden 权限不足(如访问了需要认证的接口,或文件权限不够) 1. 检查JWT令牌是否有效;2. 给网站目录添加写入权限
  1. IIS部署最佳实践
    1.环境一致性:开发、测试、生产环境使用相同的.NET版本、IIS版本;
    2.配置分离:用appsettings.Production.json覆盖生产环境的配置(如数据库连接字符串);
    3.日志监控:开启stdout日志,定期查看,及时发现问题;
    4.自动部署:用CI/CD工具(如Jenkins、GitHub Actions)实现自动构建、发布、部署;
    5.备份恢复:定期备份网站文件和数据库,确保能快速恢复;
  2. 多环境配置(appsettings.json)
    通过环境变量区分不同环境的配置:
    json
	// appsettings.json(通用配置)
	{
	"Logging": {
	"LogLevel": {
	"Default": "Information"
	}
	}
	}
	
	// appsettings.Production.json(生产环境配置)
	{
	"ConnectionStrings": {
	"DefaultConnection": "Server=prod-db;Database=ECommerceWeb;User Id=prod-user;Password=***;"
	},
	"Swagger": {
	"Enabled": false
	}
	}

IIS会自动加载对应环境的配置文件,无需修改代码。
总结
IIS部署ASP.NET Core Web API的核心是环境配对、发布正确、配置细节、权限设置,只要掌握这几点,就能避免90%的部署问题。关键要点:
1.环境准备:安装IIS和.NET托管捆绑包,确保版本与项目一致;
2.正确发布:选择框架依赖发布,目标运行时与服务器一致;
3.IIS配置:应用程序池设为“无托管代码”,网站路径指向发布文件夹;
4.权限设置:给网站目录添加IIS_IUSRS权限,确保应用能正常访问文件和数据库;
5.生产安全:关闭Swagger、启用HTTPS、开启日志;
6.问题排查:通过stdout日志和Windows事件查看器快速定位错误;
比如电商后台部署时,按照这个流程,从环境准备到网站上线仅需30分钟,而且上线后运行稳定,没有出现启动失败、权限不足等问题。掌握IIS部署,你就能把自己的API真正部署到生产环境,让用户正常访问!

本站原创,转载请注明出处:https://www.xin3721.com/ArticlecSharp/c49480.html


相关教程