宿主

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

什么是宿主

    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接口派生类对象

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

 

相关文章
|
4月前
|
Oracle 关系型数据库 网络安全
2、Window上的 虚拟机端口 暴露到 宿主机局域网教程
2、Window上的 虚拟机端口 暴露到 宿主机局域网教程
|
JSON 小程序 JavaScript
【小程序】宿主环境之通信模型和运行机制
【小程序】宿主环境之通信模型和运行机制
66 0
【小程序】宿主环境之通信模型和运行机制
|
C语言 Windows
C语言编程: windows下启动外部应用程序
C语言编程: windows下启动外部应用程序
272 0
VBScript脚本运用(脚本程序与宿主程序的交互)
做过工控的人都知道,对脚本语言的支持是标准组态软件应具备的一个基本功能(如iFix,组态王等)。如果我们用VB开发类似的功能,能实现吗
721 0
|
Web App开发 JSON 测试技术