ASP.NET Core部署:发布到IIS上
在经典ASP.NET应用程序中,所有一切都托管在IIS工作进程中(w3wp.exe),这也被称为IIS应用程序池。ASP.NET程序被托管在应用程序池中,并且被按照IIS内建的ASP.NET托管特性所实例化。当请求从http.sys传入到ASP.NET应用程序管道时,本地运行时管理器会实例化一个代表应用程序的.NET运行时,同时引入HttpRuntime对象用来处理这个请求。来自http.sys的请求被派送到对应的应用程序池和HttpRuntime实例的托管站点。
ASP.NET CORE与IIS
ASP.NET Core则完全不同,它并不是运行在IIS的工作进程中,而是独立运行的。它运行于控制台应用程序之中,控制台中则运行了Kestrel Web服务器组件。Kestrel作为一款.NET Web服务器的实现,它在吞吐量性能方面做了很多工作。它可以快速将来自网络的请求接入到应用程序中,但是它仅仅是一个最基本的Web服务器。它没有类似IIS的Web管理服务,也没有IIS那么多的功能。
ASP.NET Core程序独立运行在控制台应用程序中,并通过dotnet运行时命令调用。它并没有被加载到IIS工作进程中,但是IIS却加载了名为AspNetCoreModule的本地Module,这个Module用于执行外部的控制台程序。AspNetCoreModule是作为ASP.NET Core Server Hosting Bundle的一部分被安装在服务器上的。
安装好了后,如果你在IIS上模块里面看到AspNetCoreModule,表示安装成功

部署之前要确保你的IIS上已经安装了AspNetCoreModule托管模块,如果没有的话,点击这里进行下载并安装
说明:在win10系统、win2016以上版本只安装.netcore运行时(windowsdesktop-runtime-5.0.4-win-x64)是可以成功出现AspNetCoreModule托管模块的,不过在实际操作中,遇到了windows2012R操作系统(运行.netcore最低的操作系统了),以上方法就不成功了,即不出现AspNetCoreModule托管模块,那么就需要再安装dotnet-hosting-5.0.4-win,然后再安装windowsdesktop-runtime-5.0.4-win-x64就可以了,所以服务器版本最好高一些版本。

开始:
一、安装IIS
在控制面板→程序→启用或关闭Windows功能→勾选Internet Information Services以及Web管理工具下的IIS管理控制台
二、发布项目
发布我们建好的ASP.NET Core项目,然后选择IIS,新建一项发布配置
三、在IIS上绑定添加网站
添加一个网站,设置一下名称,并将路径指向你刚才发布的文件夹,然后启动网站即可
设置应用程序池的.NET CLR版本为“无托管代码”,因为刚才也说了,IIS是作为一个反向代理的角色,并不需要它来托管代码
四、浏览网站
这个时候出现了这个问题
错误分析:
IIS服务器上的.net core 运行时不是最新的,导致AspNetCoreModuleV2模块缺失或者报错
检查发现 项目的版本是 .netcore2.2 ,而运行时安装的为 .netcore runtime 2.1.6
查看程序 如果没有安装.netcore2.2 就需要安装
下载完成后安装
就可以打开网站了
另外,以上部署完成后,用swagger测试还是出现500错误,可能是就是内外进程设置的原因了,一般设置成外进程就行,即
hostingModel="OutOfProcess" 。
<?xml version="1.0" encoding="utf-8"?> <configuration> <location path="." inheritInChildApplications="false"> <system.webServer> <security> <requestFiltering> <requestLimits maxAllowedContentLength="1073741824" /> </requestFiltering> </security> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> </handlers> <aspNetCore requestTimeout="00:20:00" processPath="dotnet" arguments=".\Win.Test.HttpApi.Host.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="OutOfProcess" /> </system.webServer> </location> </configuration>












浙公网安备 33010602011771号