IIS 发布 .net core 3.1

官方文档地址:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/publish-to-iis?view=aspnetcore-3.1&tabs=visual-studio

第一部分:本教程介绍如何在 IIS 服务器上托管 ASP.NET Core 应用。

1.服务器装aspnetcore-runtime-3.1.1-win-x64.exe

下载链接:https://dotnet.microsoft.com/download/dotnet-core/3.1

 

 

2.服务器装dotnet-hosting-3.1.1-win.exe

注意:安装dotnet-hosting-3.1.1-win.exe可能导致所有的应用程序池都停止了,手动起来也会自定停止,这个时候不要慌,把dotnet-hosting-3.1.1-win.exe卸载了,再安装vc_redist.x64.exe,下载链接:https://www.microsoft.com/en-us/download/details.aspx?id=48145

 

 

 然后再装dotnet-hosting-3.1.1-win.exe就ok了

 

安装IIS和Windows Server Hosing之后 ,重启IIS服务,检查IIS"模块"中是否有 “AspNetCoreModule2”

 
 

 

 

 

3.发布项目,将发布生成的文件拷贝到IIS网站对应的文件夹

 

第二部分:关于发布、部署到iis的一些配置:

      1. 关于visual studio 2019发布.net core 3.0时一些配置

      发布-步骤1:选取发布目标:选择文件夹,然后点击高级: 

         

      发布-步骤2:目标框架:netcoreapp3.0, 部署模式:框架依赖,目标运行时:选择可移植。然后保存。     

           

     注意: 这里要重点说明:这里的目标运行时:win-x64或者win-x86 是你第一步,安装.net core sdk的运行时版本。并不是你操作系统的版本

   我们在第一部介绍时,就直接选择的是64位按照包,所以这个文章所有截图中都是选择64位运行时版本。

     

 

     发布-步骤3:点击发布按钮,生成文件。如果点击exe,可以看到控制台相关信息,说明发布没有问题。

发布后查看

   2.部署到iis 。

          建议查看官方文档:将 ASP.NET Core 应用发布到 IIS ,https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/publish-to-iis?view=aspnetcore-3.1&tabs=visual-studio。

          这里截图列一下我的关键配置:

          1.应用程序池,选择无托管模式。我电脑是64位,选择“启用32位应用程序”为“false”。

            

      iis进程高级选项中,修改进程模块的“标识”,使用有管理员角色的账号登录。如果不使用管理员权限账号,我这里会报500.0 - ANCM In-Process Handler Load Failure。所以一定要改。可以设置成LocalSystem

            

       2.权限配置:选择【网站】》选中【要更改的网站】,点击【基本设置】,弹出如下对话框。点击【连接为】,路径凭据中选择【特定用户】,点设置,输入管理员账号和密码。

            

  第三部分:使用 IIS 在 Windows 上托管 ASP.NET Core  问题处理:

官方文档 https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/iis/index?view=aspnetcore-3.1#iis-configuration

常见的异常处理方式:

1.500错误。

HTTP Error 500.0 - ANCM In-Process Handler Load Failure

Troubleshooting steps:

  • Check the system event log for error messages
  • Enable logging the application process' stdout messages
  • Attach a debugger to the application process and inspect

For more information visit: https://go.microsoft.com/fwlink/?LinkID=2028526

下图: 

               

部署后出现的以上错误的原因可能有以下几点:

    1、没有安装第一部分中的前2个安装包:.net core sdk(.net core sdk) 和 dotnet-hosting( .NET Core 托管捆绑包)

    2、发布或者部署时运行时版本没有选择正确。现在一般都是64位。注意详细的配置。  

    3、部署后给iis和应用程序池的权限不够。分别给iis网站和应用程序池,分管理员用户权限。

    4、如果iis服务器环境安装了以前版本的core,比如说3.0,发布后可能会有500错误。本人发布遇到这个问题,删除旧版本统一新版本解决。

 

 其他参考:

       Windows平台部署Asp.Net Core应用(基于IIS和Windows服务两种模式) : https://blog.csdn.net/weixin_33757609/article/details/93693395 。

 

2.403错误

请注意ssl的相关配置

3.503错误。

iis上其他应用报503错误,解决方式,修改下述文件下的两处地方。给这两个节点 指定加载模式 preCondition="bitness64"

C:\Windows\System32\inetsrv\config\applicationHost.config 

 

<add name="AspNetCoreModuleV2" image="%ProgramFiles%\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll" preCondition="bitness64" />

<add name="AspNetCoreModuleV2" preCondition="bitness64" />

 

Core的应用报503,如果服务器是2012R2版本的话,需要安装 Visual C++ Redistributable

链接地址: https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=48145

 4.404错误。

然后查看IIS日志, 如下图

 

 
 

 

 

打开IIS日志存放目录,C:\inetpub\logs\LogFiles\W3SVC4打开一看,没问题啊,没有错误日志啊(内心很纠结。。。)。

各种百度、Goolge就是没找到解决办法,一直以为是环境问题,服务器都重启了不下3次

最后自己尝试手动补齐了路由,一看可以了!!!
说到底还是对.NetCore了解不够深入,发布后IIS托管站点后不会对路由默认补齐,所以在项目的launchSettings.json文件里改成一朵花都没用。

 5. 500.30错误 HTTP Error 500.30 - ASP.NET Core app failed to start

报错信息:

HTTP Error 500.30 - ASP.NET Core app failed to start
Common solutions to this issue:
The app failed to start
The app started but then stopped
The app started but threw an exception during startup
Troubleshooting steps:
Check the system event log for error messages
Enable logging the application process’ stdout messages
Attach a debugger to the application process and inspect
For more information visit: https://go.microsoft.com/fwlink/?LinkID=2028265

打开事件查看器:

 

 定位错误:

 

 

 

默认路由未自动补齐导致404的解决办法:
1、Nuget 安装Microsoft.AspNetCore.Rewrite
2、在启动项目Startup.Configure方法下的app.UseMvc();代码前加入下面代码:
var option = new RewriteOptions();
option.AddRedirect("^$", "swagger"); //swagger为补充的路由
app.UseRewriter(option);

app.UseMvc();·

 

.net core后台服务运行,阻止IIS应用程序池自动回收

回收——固定时间间隔(分钟) 改为 0

——虚拟/专用内存限制(KB) 改为 0

进程模型——闲置超时(分钟) 改为 0



 
 
前后端分离部署请参考:https://www.cnblogs.com/cjdonet/p/12816751.html

文章内容引用文章:https://www.cnblogs.com/davies/p/12038023.html      https://www.jianshu.com/p/a03c67feb0bd

                                https://www.cnblogs.com/lr215/p/12901687.html          https://www.cnblogs.com/liuqiyun/p/12213247.html

posted @ 2020-09-29 09:07  浅巷深念  阅读(5647)  评论(0编辑  收藏  举报