ASP.NET Core应用通过一个进程内的HTTP服务器实例实现运行,这个服务器实例侦听HTTP请求并将请求作为组成HttpContext的一组请求功能集暴露给我们的应用程序。

ASP.NET Core搭载两个服务器实现:

  • Kestrel是一个基于libuv的跨平台HTTP服务器,libuv是一个跨平台的异步I/O库

  • WebListener是一个基于HTTP.SYS内核驱动的“Windows专用”HTTP服务器

Kestrel

Kestrel是包含在ASP.NET Core新项目模板中默认的web服务器。如果你的应用只接收来自内部网络的请求,你可以只使用Kestrel本身。

frameborder="0" scrolling="no" style="border-width: initial; border-style: none; width: 965px; height: 173px;">

如果你将你的应用部署在公共网络上,我们建议你使用IIS,Nginx或者Apache作为反向代理服务器。一个反向代理服务器接收来自网络的HTTP请求并且在经过一些初步处理后将请求传递到Kestrel服务器。过程如下图所示。

frameborder="0" scrolling="no" style="border-width: initial; border-style: none; width: 658px; height: 167px;">

对edge deployments(从公共网络上接触到流量的部署方式)使用反向代理最重要的一个原因就是安全性。因为Kestrel相对较新,对抵御安全攻击至今还没有一个完整的功能补充。安全性处理包括但不限于适当的超时,大小的限制,以及并发连接限制等问题。有关何时使用Kestrel与反向代理的更多信息,请参见Kestrel。

IIS with Kestrel

当你使用IIS或者IIS Express作为对ASP.NET Core的反向代理时,ASP.NET Core应用将运行在由该IIS工作进程分离出的一个进程中。在该IIS进程中,存在着一个特殊的IIS模块,它被用来协调反向代理的关系。它就是ASP.NET Core模块。ASP.NET Core模块的主要功能包括启动ASP.NET Core应用,当应用崩溃时处理重启,向应用传送HTTP流量。更多的信息,请参考ASP.NET Core Module。

Nginx with Kestrel

有关如何在Linux使用Nginx作为对Kestrel的反向代理服务器的更多信息,请参考Publish to a Linux Production Environment。

Apache with Kestrel

有关如何在Linux使用Apache作为对Kestrel的反向代理服务器的更多信息,请参考Using Apache Web Server as a reverse proxy。

Jexus with Kestrel

有关如何在Linux使用Jexus作为对Kestrel的转发服务器的更多信息,请参考 Jexus 5.8.2 正式发布为Asp.Net Core进入生产环境提供平台支持

WebListener

如果你在Windows上运行你的ASP.NET Core应用,你可以会遇到以下场景——你既想要在公共网络上部署你的应用,又不能使用IIS,这时,WebListener会是一个可供替代的选择。

frameborder="0" scrolling="no" style="border-width: initial; border-style: none; width: 658px; height: 167px;">

当你只想要在内网中部署你的应用时,WebListener可以被用来代替Kestrel,特别是当你需要Weblistener服务器支持功能中的某项而Kestrel恰好不支持的时候。

frameborder="0" scrolling="no" style="border-width: initial; border-style: none; width: 658px; height: 167px;">

对于内部网络场景,为了能达到最好的性能表现,我们通常推荐Kestrel服务器,但是在另一些场景中,你可以想要使用某项仅WebListener支持的功能。关于WebListener功能的更多信息,请参考WebListener。

ASP.NET Core 服务器基础组件说明

IApplicationBuilderStartup类中的Configure方法暴露了IFeatureCollection类的ServerFeatures属性。Kestrel和WebListener服务器都只提供了一个单一的功能,IServerAddressesFeature,但是不同的服务器实现可能会显示额外的功能。

IServerAddressesFeature可以用来找出哪些服务器实例端口在运行时被绑定。

ServerFeatures 的注释为“Gets the set of HTTP features the application's server providers”。

自定义服务器

你可以创建自定义服务器实现以用来替代Kestrel或者WebListener。Open Web Interface for .NET(OWIN) guide 说明了怎么去实现一个Nowin-based IServer。你可以自由地实现你的应用所需的功能接口,但至少必须支持IHttpRequestFeatureIHttpRequestFeature接口。

原文地址:http://www.cnblogs.com/Wddpct/p/6123644.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

ASP.NET Core服务器综述相关推荐

  1. 在ASP.NET Core应用程序中使用分布式缓存

    本文要点 ASP.NET Core内置了分布式缓存接口. 分布式缓存的主要好处有性能.数据共享和稳定性. Couchbase服务器是一个内存优先的数据库,非常适合作为分布式缓存. NuGet程序包使得 ...

  2. Azure 上使用 Windows Server Core 运行 ASP.NET Core 网站

    点击上方蓝字关注"汪宇杰博客" 导语 微软智慧云 Azure 上虽然早就有 App Service 这种完全托管的 PaaS 服务可以让我们分分钟建网站.但是不自己配一下环境,就不 ...

  3. ASP.NET Core 管道再探

    几乎任何服务器端处理环境都有自己的直通组件管道,用于检查.重路由或修改传入请求和传出响应.经典 ASP.NET 围绕 HTTP 模块理念进行排列,而 ASP.NET Core 采用基于中间件组件的更现 ...

  4. 用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识

    什么是REST REST 是 Representational State Transfer 的缩写. 它是一种架构的风格, 这种风格基于一套预定义的规则, 这些规则描述了网络资源是如何定义和寻址的. ...

  5. 在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序

    前言 Visual Studio 2017已经发布了很久了.做为集成了Asp.Net Core 1.1的地表最强IDE工具,越来越受.NET系的开发人员追捧. 随着Google Angular4的发布 ...

  6. 如何在ASP.NET Core中上传文档

    目录 介绍 问题 解决方案 秘密调味料成分1:IFormFile 秘密调味料成分2:IFormFile参数名称 秘密调味料成分#3:FromForm参数属性 秘密调味料成分4:使用表单元素实例化For ...

  7. ASP.NET Core 高级(一)【.NET 的开放 Web 接口 (OWIN)】

    ASP.NET Core 中 .NET 的开放 Web 接口 (OWIN) ASP.NET Core 支持 .NET 的开放 Web 接口 (OWIN). OWIN 允许 Web 应用从 Web 服务 ...

  8. ASP.NET Core 3.x 学习笔记(7)——Blazor

    ASP.NET Core 3.x 学习笔记(7)--Blazor ASP.NET Core 3.x 学习笔记(7)--Blazor 编程模式对比 Blazor 客户端宿主模型 Mono 服务器端宿主模 ...

  9. ASP.Net Core创建STK WMTS服务

    在前面文章中,介绍了如何在STK中,通过插件(ArcGIS REST Client插件和Web Map Services插件),使得STK中的3D窗口(2D窗口目前不支持)可直接自动加载网络地图.详见 ...

最新文章

  1. java中原生方法_java中原生(native)函数的用法
  2. cryptico.js java解密_從Cryptico.js中提取RSA私鑰
  3. 广告基本知识-广告与营销的区别
  4. 【原创】大叔问题定位分享(4)Kafka集群broker节点从zookeeper上消失
  5. 语音识别系统市场前景及发展趋势
  6. 8.网页找不到服务器
  7. mysql常见的存储引擎
  8. cad图形如何导入到奥维地图_如何将CAD图导入奥维地图
  9. UDP Socket编程
  10. P2422 良好的感觉
  11. 详解Xvid编码格式
  12. 计算机考试电子表格中计算的公式,WPS文字的表格中进行函数公式计算
  13. 老罗的悔改与锤子的落俗
  14. 谈谈基于模型的设计(Model-Based Design)
  15. 折半插入排序的最强版
  16. 电力设备事故演练仿真培训_电力事故VR培训_广州华锐互动
  17. 机器学习系列2 BP神经网络+代码实现
  18. 半监督学习:MixMatch
  19. 【Java专题】Java中的I/O流详解
  20. SQL server 和 mysql 自动排序生成序列号

热门文章

  1. C# 泛型多种参数类型与多重约束 示例
  2. Ubuntu系统备份和恢复
  3. C# WPF MVVM开发框架Caliburn.Micro View / View Model 命名⑨
  4. 手把手教你学Dapr - 6. 发布订阅
  5. 使用C#开发交互式命令行应用
  6. out参数不用赋值?这么神奇吗!
  7. WPF 用装饰器制作抽屉效果
  8. 一文说通C#中的异步迭代器
  9. 从 3.1 到 5.0 —— OpenReservation 更新记
  10. 5G在工业互联网应用的机遇与挑战