ASP.NET Core模块概述
原文地址:ASP.NET Core Module overview
By Tom Dykstra, Rick Strahl, and Chris Ross
ASP.NET Core模块(ANCM)让你能够在IIS之后运行ASP.NET Core应用,IIS和Kestrel各司其职,前者专于安全性,可管理性等方面,后者专于性能,我们从两种技术中都能获得益处。ANCM只和Kestrel协同工作,它不兼容于Weblistener。
支持的Windows版本:
- Windows 7和Windows Server 2008 R2和更高版本
ASP.NET Core 模块做了什么
ANCM是一个原生的IIS模块,它挂接到IIS管道,并将流量重定向到后端ASP.NET Core应用。其他大多数模块,如windows身份认证,仍然有机会运行。ANCM只在当一个handler被请求选择时进行控制,handler映射配置在应用的web.config文件中定义。
因为ASP.NET Core应用运行在某个IIS工作进程分离出的一个进程中,ANCM也能进行进程管理。当接收到第一个请求的时候,ANCM会为该ASP.NET Core应用启动进程。ANCM也有重启崩溃进程的功能。和运行在IIS进程中,通过WAS(Windows Activation Service)进行管理的传统ASP.NET 应用,在本质上是相同的。
下图说明了IIS,ANCM以及ASP.NET Core应用三者之间的关系
来自Web端的请求首先会触发内核模块HTTP.SYS驱动程序,HTTP.SYS将请求转接到IIS主端口(80)或SSL端口(443)。接下来请求会转向应用程序中配置的HTTP端口,该端口不再是80/443端口。再之后Kestrel捕获请求,推送到ASP.NET Core中间件管道中,并将其作为一个HttpContext
实例供应用程序逻辑处理。最后应用的响应信息将重传回IIS,由IIS将其传回到原先发起请求的HTTP客户端。
ANCM 还有一些其他功能:
- 设置环境变量。
- 日志以标准输出形式输出到文件存储中。
- 转寄Windows身份认证tokens。
怎么在ASP.NET Core应用中使用ANCM
这一节提供了对IIS服务器和ASP.NET Core应用设置过程的概述。更详细的信息,请参考发布到IIS。
安装 ANCM
ANCM已经被安装在服务器IIS和开发机器IIS Express中。对于服务器而言,ANCM被包括在 ASP.NET Core Server Hosting Bundle 中。对于开发机器而言,Visual Studio会自动为IIS Express和IIS(如果IIS已经被安装在开发机器中)安装ANCM。
安装 IISIntegration NuGet 包
在应用中可以安装Microsoft.AspNetCore.Server.IISIntegration。这是一个互操作性包,它可以读取通过ANCM广播的环境变量以设置你的应用。环境变量提供相应配置信息,例如端口侦听。
调用 UseIISIntegration
在应用的Main
方法中,可以调用位于WebHostBuilder
的UseIISIntegration
扩展方法
public static int Main(string[] args)
{
var config = new ConfigurationBuilder()
.AddCommandLine(args)
.Build();
var builder = new WebHostBuilder()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseConfiguration(config)
.UseStartup<Startup>()
.UseUrls("http://localhost:5001")
.UseIISIntegration()
.UseKestrel(options =>
{
if (config["threadCount"] != null)
{
options.ThreadCount = int.Parse(config["threadCount"]);
}
});
var host = builder.Build();
host.Run();
return 0;
}
UseIISIntegration
方法会查找ANCM设置的环境变量,如果没找到它将什么也不做。这种机制有利于例如在MacOS上开发测试程序并部署到运行IIS的服务器的场景。当在Mac上运行时,Kestrel以web服务器的身份存在,但是当应用部署到IIS环境时,它会自动搭接ANCM和IIS。
不要调用UseUrls
ANCM会生成一个动态端口以分配给后端进程。IWebHostBuilder.UseIISIntegration
拿着这个动态端口并配置Kestrel以侦听http://locahost:{dynamicPort}/
。这将覆盖其他的URL配置,例如IWebHostBuilder.UseUrls
。因此,在你使用ANCM时你不需要调用UseUrls
。当你不借助IIS运行应用时,它将会侦听默认端口号http://localhost:5000
。
当不借助IIS运行应用时,如果你仍需要设置端口号,你可以调用UseURLs
。此种情况下,IISIntegration
不会做任何事情,你提供给UseUrls
的端口号也将生效。但是当你借助IIS运行应用时,由ANCM动态生成的端口号将覆盖你传递给UseUrls
的任何设置信息。
在ASP.NET Core 1.0中,UseUrls
的调用需要放在IISIntegration
之前,这是为了防止ANCM配置的端口被重写。但是在ASP.NET Core 1.1中,因为ANCM设置总是会覆盖UseUrls
,这样的调用顺序将不会再有效。
在Web.config中设置ANCM选项
用以存储ANCM配置信息的Web.config文件位于应用的根目录文件夹。该文件中的配置信息表示你的应用程序的启动命令和参数。有关配置选项的示例Web.config代码和指南,请参考ASP.NET Core 模块配置参考。
在开发中借助IIS Express运行应用
通过使用ASP.NET Core模板定义的默认配置文件,Visual Studio可以启动IIS Express服务。
下一步
更多的详细信息,请参考以下资源:
ASP.NET Core模块概述的更多相关文章
- ASP.NET Core MVC 概述
https://docs.microsoft.com/zh-cn/aspnet/core/mvc/overview?view=aspnetcore-2.2 ASP.NET Core MVC 概述 20 ...
- ASP.NET Core 2.2 基础知识(十一) ASP.NET Core 模块
ASP.NET Core 应用与进程内的 HTTP 服务器实现一起运行.该服务器实现侦听 HTTP 请求,并在一系列请求功能被写到 HttpContext 时,将这些请求展现到应用中. ASP.NET ...
- 4. abp中的asp.net core模块剖析
相关模块 AbpAspNetCoreModule AbpAspNetCoreMvcModule AbpAspNetCoreMvcContractsModule abp通过这三个模块加载并配置了 asp ...
- ASP.NET Core原理概述
ASP.NET Core 是一个控制台应用程序,在其 main 方法中创建一个Web服务器,以下是program.cs中的代码: using Microsoft.AspNetCore; using M ...
- asp.net core模块学习
一.配置管理 二.管道 三.认证与授权 四.MVCDemo 五.IdentityServer4 一.配置管理 1,读取内存配置 using System; using Microsoft.Extens ...
- asp.net core IdentityServer4 概述
概览 现代应用程序看上去大都是这样的: 最常见的交互是: 浏览器与Web应用程序通信 Web应用程序与Web API通信(有时是独立的,有时是代表用户的) 基于浏览器的应用程序与Web API通信 本 ...
- ASP.NET Core DI概述
众所周知,ASP.NET Core有一个DI框架,应用程序启动时初始化. 预定义依赖 1: IApplicationBuilder:提供了配置应用程序的请求管道机制 2:ILoggerFactory: ...
- ASP.NET Core Module overview模块概述
原文地址:ASP.NET Core Module overview By Tom Dykstra, Rick Strahl, and Chris Ross ASP.NET Core模块(ANCM)让你 ...
- ASP.NET Core WebListener 服务器
原文地址:WebListener server for ASP.NET Core By Tom Dykstra, Chris Ross WebListener是一个只能运行在Windows上的ASP. ...
随机推荐
- 创建几个常用table展示方式插件
这次和大家分享的是自己写的一个table常用几种展示格式的js插件取名为(table-shenniu),样式使用的是bootstrap.min.css,还需要引用jquery.min.js包,这个插件 ...
- javascript:逆波兰式表示法计算表达式结果
逆波兰式表示法,是由栈做基础的表达式,举个例子: 5 1 2 + 4 * + 3 - 等价于 5 + ((1 + 2) * 4) - 3 原理:依次将5 1 2 压入栈中, 这时遇到了运算符 + ...
- js callee,caller学习
原文地址:js callee,caller学习 /* * caller 返回一个对函数的引用,该函数调用了当前函数. * 如果函数是由顶层调用的,那么 caller包含的就是 null . * 如果在 ...
- spring的BeanFactory加载过程
ApplicationContext spring = new ClassPathXmlApplicationContext("classpath*:spring/applicationCo ...
- 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.1
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...
- 【SAP业务模式】之ICS(五):定价配置
本篇博文讲述ICS业务中的定价配置. 1.定义销售订单类型 目录:SPRO-销售与分销-销售-销售凭证-销售凭证抬头-定义销售凭证类型 事务代码:VOV8 2.定义销售订单类型 目录:SPRO-销售与 ...
- Android local.properties 文件读取
转载请标明出处:http://www.cnblogs.com/zhaoyanjun/p/6202369.html 本文出自[赵彦军的博客] 在Android Studio项目里面有个local.pro ...
- 让你从零开始学会写爬虫的5个教程(Python)
写爬虫总是非常吸引IT学习者,毕竟光听起来就很酷炫极客,我也知道很多人学完基础知识之后,第一个项目开发就是自己写一个爬虫玩玩. 其实懂了之后,写个爬虫脚本是很简单的,但是对于新手来说却并不是那么容易. ...
- web音乐播放器总结
前言 项目暂时告一段落,胸中有股炽热之气望喷涌而出!忍不住吐槽,为什么程序员要加班啊,为什么产品下达deadline,就得把这生死剑架在程序员的脖子上.卧槽,听说程序员在国外是叫工程师的.最近看了很多 ...
- Apache2.4卡住无法访问的解决……
早两个星期,搭建了一个项目管理平台--<如何安装一个优秀的BUG管理平台--真的是手把手教学!>.以前都是用apache2.2的,这次换了apache2.4.安装起来是没有问题的,结果运行 ...