asp.net core 多种启动方式
asp.net core 可以通过项目名称,iis express 或 iis 进行启动,更具是进程内还是进程外托管,asp.net core web应用程序的支持服务器并不一样,使用项目名称启动默认会忽略进程内进程外的区别,而使用iis express 和 iis 都是明显的不同。
asp.net core web 应用程序默认是进程托管。
asp.net core 典型项目的项目结构
如下图:
典型的asp.net core mvc 项目结构如图,其中wwwroot 下是一些静态文件一般是js ,css等,controllers 下是各个控制器,models 中模型类,views 下是视图一般是cshtml 文件,program.cs 是整个asp.net core web应用程序的启动类,是整个程序的起点入口,startup.cs 是配置asp.net core项目的各种服务的配置类,appsettings.json 项目的配置信息。
asp.net core 项目下的launchsettings.json 和appsettings.json
一般而言,launchsettings.json 是整个项目的项目启动配置文件,在这里配置是整个项目启动时需要进行的各种配置,如程序运行环境的指定,同时launchsettings 文件仅使用于本地开发环境,我们不需要把它发布到生产环境中。
而在项目发布到生产环境时需要使用某些独立的配置,就需要使用appsettings 配置文件,在该文件中将存放应用程序运行的配置信息,比如数据库连接字符串等。
ASP.NET Core (launchSettings)
了解launchSettings.json
打开launchSettings.json 文件后,默认情况下,您将找到以下代码。
在这里,您可以看到,我们有两个部分。 一种用于IIS Express(IIS服务器),另一种用于Kestrel服务器。 在Visual Studio中,您可以找到上述两个配置文件(IIS Express和FirstCoreWebApplication),如下所示。
如果选择 IIS Express,则它将使用 IIS 服务器,如果您选择 FirstCoreWeb 应用程序,则它将使用 Kestrel 服务器。
launchSettings.json文件的 commandName 属性的值可以是以下任何一个:
- IISExpress
- IIS
- Project
launchSettings.json文件的CommandName属性值以及应用程序项目文件中的AspNetCoreHostingModel元素值将确定将要使用和处理传入HTTP请求的内部和外部Web服务器(反向代理服务器)。 为了更好地理解,请查看下表。
如何验证其工作模式?
方法1:
当我们在launchSettings.json文件中将CommandName用作Project时,ASP.NET Core将忽略AspNetCoreHostingModel值。 Kestrel是唯一将托管应用程序并处理传入请求的服务器。 让我们证明这一点。 现在,我们需要将启动Profile设置为WebApplication4,如下所示。
如果查看launchSettings.json文件,那么您将看到WebApplication4配置文件使用“ commandName”:“ Project”值,并且请注意下面所示的应用程序URL。 在我的应用程序中,URL为http:// localhost:5000,端口号在您的示例中可能有所不同。
现在,将应用程序项目文件中的AspNetCoreHostingModel元素值更改为InProcess,如下所示。
然后, 启动该项目, 可以看到首先启动了CMD,在这种情况下将使用kestrel服务器托管应用程序, 如下所示:
注: 因为当CommandName值为Project时,它将忽略AspNetCoreHostingModel值,而Kestrel是唯一将托管和处理传入请求的服务器。
方法2:
如果我们使用命令名作为 IISExpress 配置文件,如果我们将 AspNetCoreHostingModel 值设置为 OutOfProcess,则 ASP.NET Core 使用 IIS Express 作为外部 Web 服务器,Kestrel 是内部 Web 服务器。外部 Web 服务器(即 IIS Express)将接收传入的 HTTP 请求,然后将请求转发到内部 Web 服务器,即将处理请求的 Kestrel。让我们证明这一点。
由于我们已经将启动配置文件设置为 IIS Express,我们只需要将 AspNetCoreHostingModel 元素值更改为应用程序的项目文件中的 OutOfProcess,如下所示。
运行应用程序,浏览器输出了项目名称, 如下所示, 因为请求由Kestrel Web Server服务器处理。