前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

宿主

作者头像
莫问今朝
发布2018-08-31 12:08:18
9900
发布2018-08-31 12:08:18
举报
文章被收录于专栏:博客园博客园

什么是宿主

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

宿舍和服务器的不同

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

设置宿主

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

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

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

代码语言:javascript
复制
  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接口派生类对象

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-11-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是宿主
  • 宿舍和服务器的不同
  • 设置宿主
    • UseUrls(params string[] urls)
      • UseKesttrel() 
        • UerContentRoute(string contentRoute)
          • UseIISIntegration()
            • CaptureStartupErrors(bool captureStartupErrors)
              • Configure( Action<IApplicationBuilder> configureApp)
                • Build()
                相关产品与服务
                消息队列 TDMQ
                消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档