• 宿主


    什么是宿主

        ASP.NET Core应用程序需要在宿主中执行.宿主必须实现IWebHost接口,这个接口暴露了功能和服务的集合,以及Start方法。宿主通常使用WebHostBuilder的实例进行创建,该实例构建并返回一个WebHost实例。WebHost引用服务器来处理请求

    宿舍和服务器的不同

        宿主负责应用程序启动和生命周期管理。服务器负责接收HTTP请求。确保应用程序服务和服务器可用并正确配置也是宿主职责一部分。可以把宿主看成是服务器的包装。宿主被配置为使用一个特定的服务器;服务器并不知道它的宿主。

    设置宿主

       下面使用控制台程序来创建一个宿主。

    然后我们在NuGet包中添加core的依赖项

     最后我们Main方法中创建宿主对象

      class Program
        {
            static void Main(string[] args)
            {
                var host = new WebHostBuilder()
                    //设置端口号
                     UseUrls("http://*:7777;http://*:7778")//指定程序集会使用Kestrel服务器
                     .UseKestrel()
                     //指定 Directory.GetCurrentDirectory 作为内容根
                     .UseContentRoot(Directory.GetCurrentDirectory())
                     //指定应用程序需要使用IIS
                     .UseIISIntegration()
                     //设置应用程序名称
                     .UseSetting("applicationName","MyHost")
                     //捕捉异常
                     .CaptureStartupErrors(true)
                     //指定程序应用程序会显示详细的启动错误信息
                     .UseSetting("detailedErrors","true")
                     //设置中间件
                     .Configure(app=>
                     {
                         app.Run(async (y) => await y.Response.WriteAsync("Hello MyHost"));
                     })
    //创建宿主对象 .Build(); host.Run();
    } }

        上面代码中使用了WebHostBuilder类配置了宿主对象。下面我们解析各个配置的作用

    UseUrls(params string[] urls)

       urls设置分号(;)来分割服务器该响应的URL前缀。比如“http://localhost:7777”。域名可以用“*”替换,表明服务器需要针对任何使用指定端口及协议的IP地址或域名监听请求。协议(“http://”或“https://”)必须包含在每个URL里,前缀由配置好的服务器解释;服务器之间支持的格式有所不同。这个例子中我们同事可以使用7777端口和77778端口同时访问

    UseKesttrel() 

        WebHostBuilder需要你提供实现了IServer接口的服务器。Usekestrel指定应用程序会使用Kestrel服务器

    UerContentRoute(string contentRoute)

        服务器的内容根(content root)决定它将在哪里搜索内容文件,比如MVC视图文件。默认的内容根是应用程序运行的文件夹

           注意:指定Directory.GetCurrentDirectory作为内容根时,当应用程序启动时会使用Web项目的根目录作为应用程序的内容根(比如,从Web项目文件夹调用 dotnet run)。Visual Studiodotnet new 的模板时默认使用Directory.GetCurrentDirectory作为内容根的。

    UseIISIntegration()

          如果应用程序需要使用IIS,需要构建宿主时调用UseIISIntegration方法。注意这不是像UseKestrel那样配置一个服务器。为了让ASP.NET Core使用IIS,必须同时指定UseKestrel和UseIISIntegration。Kestrel被设计为在代理后运行而不应该直接部署到互联网。UseIISIntegration指定IIS为反向代理服务器。

              注意UseKestrelUseIISIntegration行为区别非常大,IIS只是作为一个反向代理。UseKestrel创建Web服务器并且对代码进行托管。UseIISIntegration指定IIS作为泛型代理服务器。它同时也检查了IIS/IISExpress使用的环境变量并作出比如使用哪个动态端口,设置什么Header等绝对,然而它不处理或创建IServer

    UseSetting(string key,string value)

           WebHostBuilder提供了方法用于为宿主设置大多数可用的配置值,它也可以被配置为直接使用的UseSetting以及相关的键,比如指定应用程序名称(“applicationName”)和指定是否启动显示详细错误信息(“detailedErrors”)

    CaptureStartupErrors(bool captureStartupErrors)

           设置是否启动异常捕捉,默认为false,当值为false时,在启动过程中的错误会导致宿主退出。当值为true时,宿主会捕捉Startup类中的任何异常,并试图启动服务器。

    Configure( Action<IApplicationBuilder> configureApp)

          添加中间件到宿主中

    Build()

          创建宿主对象,返回一个IWebHost接口派生类对象

    最后我们启动服务器进行测试

  • 相关阅读:
    spring属性的三种注入方法
    spring整合web项目原理
    IOC与DI区别
    近期的一些思考(前后台对接方面)
    关于form表单回车自动刷新
    css画心形、三角形的总结
    网页播放器与播放器定制
    css实现div内凹角样式
    20190614笔记(颜色透明度,css,filter,滤镜,计算属性,json和formData转换)
    关于注册页面的总结
  • 原文地址:https://www.cnblogs.com/yan7/p/7838227.html
Copyright © 2020-2023  润新知