ASP.NET Core 应用与进程内的 HTTP 服务器实现一起运行.该服务器实现侦听 HTTP 请求,并在一系列请求功能被写到 HttpContext 时,将这些请求展现到应用中.

ASP.NET Core 随附两种服务器实现:

  • Kestrel 是适用于 ASP.NET Core 的默认跨平台 HTTP 服务器.
  • HTTP.sys 是仅适用于 Windows 的 HTTP 服务器,它基于 HTTP.sys 核心驱动程序和 HTTP 服务器 API.在 ASP.NET 1.x 中被命名为 WebListener.

Kestrel

Kestrel 可以单独使用,也可以与反向代理服务器(如IIS,Nginx 或 Apache)一起使用.反向代理服务器接收到来自 Internet 的 HTTP 请求,并在运行一些初步处理后,将这些请求转发到 Kestrel.

将 IIS 或 IIS Express 用作 ASP.NET Core 的反向代理时,ASP.NET Core 应用在独立于 IIS 工作进程的某个进程中运行.在 IIS 进程中,ASP.NET Core 模块协调反向代理关系.ASP.NET Core 模块的主要功能是启动ASP.NET Core 应用,在其出现故障时重启应用,并向应用转发 HTTP 流量.

HTTP.sys

如果 ASP.NET Core 应用在 Windows 上运行,则 HTTP.sys 是 Kestrel 的替代选项.为了获得最佳性能,通常建议使用 Kestrel,在向 Internet 公开应用且所需功能受 HTTP.sys 支持(而不是 Kestrel)的方案中,可以使用HTTP.sys.

何时结合使用 Kestrel 和反向代理

即使不需要反向代理服务器,使用反向代理服务器也是个不错的选择:

  • 它可以限制所承载的应用中的公开的公共外围应用;
  • 它可以提供额外的配置和防护层;
  • 它可以更好地与现有基础结构集成;
  • 他可以简化负载均衡和SSL配置,仅反向代理服务器需要SSL证书,并且该服务器可以使用普通 HTTP 在内部网络上与应用服务器通信.

启用 Kestrel

默认情况下,ASP.NET Core 项目的 Program.cs 文件中 的 CreateDefaultBuilder 方法内部调用了 UseKestrel .

Kestrel 选项

Kestrel Web 服务器有很多选项,这些选项在面相 Internet 的部署中非常重要:

        public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
return WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseKestrel((context, options) =>
{
//设置最大连接数,默认不受限制
{
options.Limits.MaxConcurrentConnections = ; //对于已从 HTTP 或 HTTPS 升级到另一个协议(例如,Websocket 请求)的连接,使用下面这个属性设置最大连接数.
options.Limits.MaxConcurrentUpgradedConnections = ;
} //请求正文限制,默认最大 30,000,000 字节,约 28.6 MB.
{
options.Limits.MaxRequestBodySize = * ;
} /*请求正文最小数据速率和宽限期
Kestrel 每秒检查一次数据是否以指定的速率(字节/秒)传入.如果速率低于最小值,则连接超时。
宽限期是 Kestrel 提供给客户端用于将其发送速率提升到最小值的时间量.在此期间不会检查速率.宽限期有助于避免最初由于 TCP 慢启动而以较慢速率发送数据的连接中断。
默认的最小速率为 240 字节/秒,包含 5 秒的宽限期。
最小速率也适用于响应。
*
*/
{
options.Limits.MinRequestBodyDataRate = new MinDataRate(, TimeSpan.FromSeconds());
options.Limits.MinResponseDataRate = new MinDataRate(, TimeSpan.FromSeconds());
}
});
}

终结点配置

默认情况下,ASP.NET Core 应用绑定到 http//localhost:5000 ,如果创建项目时勾选了 "为 HTTPS 配置" ,则还会绑定到 https://localhosst:5001

这点,我们从 launchSetting.json 文件中也可以查到:

    "Demo1": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "api/values",
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}

我们可以通过修改  launchSetting.json 文件来修改终结点.

    "Demo2": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "api/values",
"applicationUrl": "http://localhost:5566;http://localhost:6677;https://localhost:7788",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}

可以通过 UseUrls 方法修改终结点:

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseUrls("http://localhost:9527","https://localhost:8848");

修改端口号

        public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
return WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>() //下面三种修改方式都是可以的.
.ConfigureKestrel(options => { options.ListenLocalhost(9902); });
//.UseKestrel(options => { options.ListenLocalhost(9901); });
//.UseKestrel((context, options) => { options.ListenLocalhost(9900); })
}

如果我们设置端口号 为 0 ,那么 Kestrel 将动态绑定到可用的端口号.

        public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
return WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
//正确方法
.UseKestrel(options => { options.ListenAnyIP(); });
//.UseUrls("http://127.0.0.1:0");
//.UseKestrel((context, options) => { options.ListenAnyIP(0); });
//.ConfigureKestrel(options => { options.ListenAnyIP(0); }); //错误写法: ListenLocalhost(0) 及 UseUrls("http://localhost:0");
}

ASP.NET Core 2.2 基础知识(十) Web服务器 - Kestrel的更多相关文章

  1. ASP.NET Core 2.2 基础知识(十八) 托管和部署 概述

    为了方便演示,以 .NET Core 控制台应用程序讲解. 我们新建一个控制台应用程序,安装 "Newtonsoft.Json" Nuget 包,然后右键点击该项目,选择" ...

  2. ASP.NET Core 2.2 基础知识(十二) 发送 HTTP 请求

    可以注册 IHttpClientFactory 并将其用于配置和创建应用中的 HttpClient 实例. 这能带来以下好处: 提供一个中心位置,用于命名和配置逻辑 HttpClient 实例. 例如 ...

  3. ASP.NET Core 2.2 基础知识(十六) SignalR 概述

    我一直觉得学习的最好方法就是先让程序能够正常运行,才去学习他的原理,剖析他的细节. 就好像这个图: 所以,我们先跟着官方文档,创建一个 SignalR 应用: https://docs.microso ...

  4. ASP.NET Core 2.2 基础知识(十四) WebAPI Action返回类型(未完待续)

    要啥自行车,直接看手表 //返回基元类型 public string Get() { return "hello world"; } //返回复杂类型 public Person ...

  5. ASP.NET Core 2.2 基础知识(十五) Swagger

    安装 Nuget 包 注册 Swagger public void ConfigureServices(IServiceCollection services) { services.AddMvc() ...

  6. ASP.NET Core 2.2 基础知识(十一) ASP.NET Core 模块

    ASP.NET Core 应用与进程内的 HTTP 服务器实现一起运行.该服务器实现侦听 HTTP 请求,并在一系列请求功能被写到 HttpContext 时,将这些请求展现到应用中. ASP.NET ...

  7. ASP.NET Core 2.2 基础知识(十三) WebAPI 概述

    我们先创建一个 WebAPI 项目,看看官方给的模板到底有哪些东西 官方给出的模板: [Route("api/[controller]")] [ApiController] pub ...

  8. ASP.NET Core 2.2 基础知识(九) 使用托管服务实现后台任务

    在 ASP.NET Core 中,后台任务作为托管服务实现.托管服务是一个类,而且必须实现 IHostedService 接口,该接口定义了两个方法: StartAsync(CancellationT ...

  9. ASP.NET Core 2.2 基础知识(八) 主机 (未完待续)

    主机负责应用程序启动和生存期管理.共有两个主机 API : 1.Web 主机 : 适用于托管 Web 应用,基于 IWebHostBuilder ; 2.通用主机 : 适用于托管非 Web 应用. 基 ...

随机推荐

  1. [Leetcode] climbing stairs 爬楼梯

    You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...

  2. Could not resolve com.android.support:multidex:1.0.2

    http://blog.csdn.net/goodlixueyong/article/details/50992835

  3. VC++使用CImage PNG转BMP图片透明背景处理

    PNG格式的图片是支持透明通道的,BMP格式的图片是没有透明通道的,所以当PNG格式的图片转换为BMP格式时,对于PNG图片的透明背景就需要进行特别的处理. VC++中的HBITMAP是支持透明色的, ...

  4. HUSTOJ增加其他语言出现RuntimeError解决办法

    HUSTOJ增加其他语言,如Python.Java.Pascal等等,如果程序是正确的,却报运行错误,添加okcall就行. 具体错误可以看日志: [ERROR] A Not allowed syst ...

  5. 说明exit()函数作用的程序

    // algo1-4.cpp 说明exit()函数作用的程序 #include"c1.h" int a(int i) { if(i==1) { printf("退出程序的 ...

  6. 动态规划:状压DP-斯坦纳树

    最小生成树是最小斯坦纳树的一种特殊情况 最小生成树是在给定的点集和边中寻求最短网络使所有点连通 而最小斯坦纳树允许在给定点外增加额外的点,使生成的最短网络开销最小 BZOJ2595 题意是给定一个棋盘 ...

  7. JVM 性能排查--查看哪个对象占用内存大

    参考:http://blog.csdn.net/chenleixing/article/details/44227327/ 1.  在IE地址栏中输入:http://localhost/test/in ...

  8. 扑克牌(cards)

    扑克牌 思路 这题也是二分!! 我们二分有几套牌,然后再去检验是否符合,至于怎么想到的,不要问我,我也不知道 那么我们主要解决的就是check函数 我们将二分的套数和每种牌的数量进行比较,如果该种牌的 ...

  9. [bzoj3223]文艺平衡树——splay

    题意 你应当编写一个数据结构,支持以下操作: 反转一个区间 题解 我们把在数组中的位置当作权值,这样原序列就在这种权值意义下有序,我们考虑使用splay维护. 对于操作rev[l,r],我们首先把l- ...

  10. ie6浏览器兼容性

    1.ie6双倍边距bug 块状元素设置float(左浮动或有浮动),并且设置margin值之后,第一个浮动的元素其左侧margin值为正常的2倍,如图,可以看到第一个元素的左侧边距于其他元素两两之间的 ...