ASPNetCore启动流程和托管模式(1)

直接上代码,重点文字看注释

namespace ProNetCore
{
    public class Program
    {
        public static void Main(string[] args)
        {
            //在内部会先配置K8s服务器和IIS相关,其他配置
            IHostBuilder builder = Host.CreateDefaultBuilder(args);
            //启用用户配置的参数,其中包含我们注册的服务/组件以及请求处理管道相关内容
            builder.ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Test>(); });

            //webhost 用来监听Http请求,就会跳转到Startup类中,
            //在Startup类中有Configure这个方法来可以处理:HTTP请求处理
            IHost webhost = builder.Build();//走到这里会跳转到ConfigureServices()这个方法
            webhost.Run();//Run的时候会到Configure()方法//CreateHostBuilder(args).Build().Run();  
        }

        public class Test
        {
            public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
                app.UseRouting();
                app.UseEndpoints(endpoints =>
                {
                    endpoints.MapGet("/", async context =>
                    {
                        await context.Response.WriteAsync($"ProcessName:{System.Diagnostics.Process.GetCurrentProcess().ProcessName}");
                    });
                });
            }
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
}

  2种托管模式

 1.InProcess(进程内/默认)   2.OutOf(进程外)
 //进程内比进程外提供更好的性能
 //进程内有一个服务器:要么是IIS,要么是K8s
 //进程外有2个服务器:一个是内部服务器(K8s),一个是外部服务器(IIS,nginx....)
 //AspNetCore 内置的服务器是K8s 
 //在调试的时候
 //如果选择IIExpress进行调试:当前进程的名字就是IISExpress  在任务管理器里就会找到一个IISEXpress.exe的文件
//如果选择项目名称ProNetCore进行调试:当前进程的名字就是ProNetCore 

 //IISExpress和IIS的区别:
 //1:IISExpress是轻量级版本,针对开发时优化的一个版本,在实际的生产过程中,往往使用的是IIS

通过dotnet core 进行启动项目

  在浏览器中回车上面的URL都是ok的

  

 

 public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }
        public IConfiguration Configuration { get; }

        //将服务注册到中 IServiceCollection
        public void ConfigureServices(IServiceCollection services)//,ILoggingBuilder logging
        {
            services.AddControllers();
            
            //logging.AddNLog();
            services.AddLogging();
        }
        //IApplicationBuilder:定义一个类,该类提供 用于配置应用程序的请求管道的 机制。
        //IWebHostEnvironment:提供有关应用程序正在运行的 web 宿主环境的信息
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
        {
            if (env.IsDevelopment())
            {
                //从管道捕获同步和异步 Exception 实例,并生成 HTML 错误响应
                app.UseDeveloperExceptionPage();
            }
            //添加用于将 HTTP 请求重定向到 HTTPS 的中间件。
            app.UseHttpsRedirection();
            //将 Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware 中间件添加到指定的 IApplicationBuilder 中。
            app.UseRouting();
            app.UseAuthorization();
            loggerFactory.AddNLog();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
    }
人各有命,上天注定,有人天生为王,有人落草为寇。脚下的路,如果不是你自己的选择,那么旅程的终点在哪,也没人知道。你会走到哪,会遇到谁,都不一定。
原文地址:https://www.cnblogs.com/ZkbFighting/p/14693255.html