asp.net core windows iis 部署方案及常见错误全记录
2022-02-17独立发布
项目-》发布-》部署模式选择独立-目标运行时选择相应的平台,然后复制publish目录到目标服务器,这种不需要安装运行时,直接命令 dotnet xx.dll即可运行,但是这种文件比较大,通常不用这种
框架依赖发布
项目-》发布-》部署模式选择框架依赖-目标运行时选择相应的平台,然后复制publish目录到目标服务器,这种需要提前安装运行时或者sdk,直接命令 dotnet xx.dll即可运行
部署到windows
可以部署到windows服务,IIS两种
部署到windows service
1. 下载nssm:http://www.nssm.cc/download
2. 运行cmd,定位到nssm.exe文件路径,运行nssm install
3. 在弹出的窗口配置:
Path:dotnet所在的目录,一般默认是在C:\Program Files\dotnet\dotnet.exe;
Startup directory:程序所在的目录,就是最后程序dll所在的目录;
Arguments:程序dll的名称,一般是项目名加上.dll;
Service name:在此写上服务的名称即可。
最后点击install service 完成windows服务安装。
在windows服务找到对应服务名,启动,然后根据launchSettings.json配置的端口访问,即可调取接口。如果使用Nginx代理的话,注意端口是5000
这种方法如果对外提供服务还得配合Nginx等代理
部署到IIS
首先安装运行时环境
ASP.NET Core 托管捆绑包 包含运行现有 Web/服务器应用所需的一切内容。捆绑包包括 .NET 运行时、ASP.NET Core 运行时
https://dotnet.microsoft.com/zh-cn/download/dotnet/6.0选择Hosting下载https://dotnet.microsoft.com/zh-cn/download/dotnet/thank-you/runtime-aspnetcore-6.0.2-windows-hosting-bundle-installer ,点击安装即可
1、发布项目
2、拷贝到服务器指定文件夹;
3、IIS 添加站点;
4、修改应用程序池为“无托管”;
IIS部署常见错误
1、错误码:405
解决方法:在web.config的system.webServer结点下添加如下代码
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
</modules>
2、错误码:500.0 In-Process Handler Load Failure
方法1:
应用池高级配置 - 启动32位应用程序 - 设置为True
方法2:
web.config
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" startupTimeLimit="3600" requestTimeout="23:00:00" hostingModel="InProcess">
删除 hostingModel="InProcess"
3、错误码:500.19 Internal Server Error 未安装 windows 服务器托管,打不开当前项目的模块选项 参考上面安装运行时
4、错误码:500.21 Internal Server Error 处理程序“aspNetCore”在其模块列表中有一个错误模块"AspNetCoreModuleV2"
iis网站查看模块 看是否有AspNetCoreModuleV2 如果没有参考上面安装运行时
5、错误码:500.35 Multiple In-Process Applications in same Process
检查端口是不是冲突了,多半是IIS项目部署的时候,多个项目内部启动端口冲突。
6、错误码:502.5 Out-Of-Process Startup Failure
解析:1)、没有安装指定的运行时,进程外启动失败。参考上面安装运行时
2)、还有可能是在发布的时候,缺少某些依赖dll文件,可以打开日志调试。
3)、或者使用 dotnet 命令行查看,是否有错误信息在控制台出现。
7、错误码:503 service unavailable 开启程序池即可
8、An error occurred while starting the application
解析:项目已经可以启动,证明环境已经正常,只不过在项目启动的时候,出现了错误,也就是说是项目代码的问题。
方案:查看日志,看项目文件是否齐全。
开启iis日志记录
找到发布目录下web.config stdoutLogEnabled="false" 改为true 然后在根目录创建logs目录
<?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=".\xx.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
</system.webServer>
</location>
</configuration>