.NET5在IIS中部署时可能遇到的问题梳理

IIS 安装的问题

这里有两个问题,第一个安装 IIS,都勾选哪几项,我为了测试效果,重装了我的某一台服务器:

.NET5 在 IIS 中部署时可能遇到的问题梳理

然后安装下 IIS,我这里很简单的勾选下这几项,不过也没有具体测试,是否可以更少的安装:
.NET5 在 IIS 中部署时可能遇到的问题梳理安装完 IIS,系统里找不到,这确实偶尔会有这个小问题:
需要重启下,然后就可以在控制面板里找到:
.NET5 在 IIS 中部署时可能遇到的问题梳理关于 IIS 的安装就特别简单了,不多说了,下边说说重头戏。下载运行时或者 SDK,那为了演示效果,肯定我们在服务器里,只需要下载运行时是吧,毕竟不需要开发,或者命令行操作,如果你是用 IIS 的话,肯定不会再搞命令行了,基本都是本地拷贝上传到服务器的。

下载地址:
https://dotnet.microsoft.com/download/dotnet/thank-you/runtime-aspnetcore-5.0.0-windows-x64-installer

接下来就是部署站点了。

IIS 部署,出现 500.19 异常

首先,已知是项目已经在本地成功升级.net5,如果不会的话,可以看看我之前的文章《BCVP 第 2 期:项目已完成升级.NET5.0》,然后本地开发已经能正常运行了,把发布后的文件上传到服务器。关于这个异常,先来个异常截图,其实一般老手一眼就能看出来问题点:

.NET5 在 IIS 中部署时可能遇到的问题梳理

 

没错,就是这个500.19 – Internal Server Error

 

我之前写过一篇很全的升级 3.1 的文章:

https://www.cnblogs.com/laozhang-is-phi/p/beautifulPublish-mostBugs.html

这里讲了几乎所有升级 3.1 的时候遇到的问题,同样适用于 5.0。

 

.NET5 在 IIS 中部署时可能遇到的问题梳理

 

没错,就是没有安装指定的模块!测试方法,就是点击对应的站点,右侧功能区,点击模块,看看是否正常显示:

.NET5 在 IIS 中部署时可能遇到的问题梳理

 

所以,就需要安装指定的模块了。

 

因为是.NET5,所以不仅需要安装运行时,还要安装 HOST,省事儿的话,直接安装捆绑的包就行了:

https://dotnet.microsoft.com/download/dotnet/5.0

 

然后下载并安装:

.NET5 在 IIS 中部署时可能遇到的问题梳理

 

安装完成后,可以在控制面板的程序中,查看到相应的结果:

.NET5 在 IIS 中部署时可能遇到的问题梳理

 

如果提示重启的话,需要重启,接下来就可以在 IIS 中,点击模块,正常显示了:

.NET5 在 IIS 中部署时可能遇到的问题梳理

 

 

是不是很熟悉,是不是很简单?

 

IIS 部署,出现异常 502.5

刚刚我们已经安装了 Host 和 Runtime,但是运行的时候还是出现了 502.5,那是为什么?现在我还是把错误截图贴出来:

.NET5 在 IIS 中部署时可能遇到的问题梳理

可以看到,是进程外启动失败,如果你看过我的视频,关于进程内和进程外的介绍,肯定会知道他们的区别。

进程外,其实就是关于 Kestrel.exe 的,进程内是 w3wp.exe 的,如果你之前的项目是 3.1 升级过来的,在发布的时候,会生成一个 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=".Blog.Core.Api.dll" stdoutLogEnabled="false"
stdoutLogFile=".logsstdout" hostingModel="OutOfProcess" />
</system.webServer>
</location>
</configuration>
<!--ProjectGuid: 6F47A41A-085E-4422-BB73-5A2CBAA07D9F-->

就是 hostingModel,不知道有多少小伙伴在意过这个,这里官方默认的是 OutOfProcess 进程外的,但是如果你新建一个.net5 的项目,它发布好后,默认的就是 inprocess 的,不信你自己可以看看。

.NET5 在 IIS 中部署时可能遇到的问题梳理

这就导致了,部署的时候,报了进程外的异常,所以只需要把这里改成 inprocess 就行了,就可以一切正常。如果你说,我就想要进程外的,
可以!在服务器上安装对应的 SDK 就行
了,记得有必要的话需要重启服务器的。到这里,应该就没有什么问题了:.NET5 在 IIS 中部署时可能遇到的问题梳理

.NET5.0 无法连接 Oracle

这个也是这几天问的比较多的,我之前使用的 Oracle 不多,但是经过测试,发现了.NET5.0 的 Web 项目连接 Oracle 的时候出异常,但是控制台却是可以的。经过官方给建议,主要是 ASP.NET5.0 做了更高的安全验证:

.NET5 在 IIS 中部署时可能遇到的问题梳理

这也就是说明了,为什么控制台会成功,而 web 项目会失败的原因。

更多内容,查看我提交的这个 issue 吧:

https://github.com/dotnet/aspnetcore/issues/27872

官方也很快的给出了解决方案和跟踪报告,横跨全球,六个小时就解决了,说实话真的很佩服,也很激励我的。

方案很简单,只需要在.net5 的 webapi 项目的.csproj 文件中,配置属性即可:

<EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>

 

.NET5 在 IIS 中部署时可能遇到的问题梳理

 

想必都能看得懂,好啦,.NET5 已经顺利的连上 Oracle 了,这种问题还是要和第三方沟通,因为不是.Net 的问题的。


来源:老张的哲学

© 版权声明

☆ END ☆
喜欢就点个赞吧
点赞0 分享
图片正在生成中,请稍后...