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. ...
随机推荐
- MVC通过路由实现URL重写
public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.Ro ...
- 个人网站对xss跨站脚本攻击(重点是富文本编辑器情况)和sql注入攻击的防范
昨天本博客受到了xss跨站脚本注入攻击,3分钟攻陷--其实攻击者进攻的手法很简单,没啥技术含量.只能感叹自己之前竟然完全没防范. 这是数据库里留下的一些记录.最后那人弄了一个无限循环弹出框的脚本,估计 ...
- 程序员必须要知道的Hadoop的一些事实
程序员必须要知道的Hadoop的一些事实.现如今,Apache Hadoop已经无人不知无人不晓.当年雅虎搜索工程师Doug Cutting开发出这个用以创建分布式计算机环境的开源软...... 1: ...
- Java中常用集合操作
一.Map 名值对存储的. 常用派生类HashMap类 添加: put(key,value)往集合里添加数据 删除: clear()删除所有 remove(key)清除单个,根据k来找 获取: siz ...
- css样式之background详解
background用法详解: 1.background-color 属性设置元素的背景颜色 可能的值 color_name 规定颜色值为颜色名称的背景颜色(比如 red) he ...
- Windows下MySQL无法启动
问题描述: 从网上下了5.7 的MySQL,在bin目录下执行 start mysqld ,弹出个cmd窗口一闪就没了,也看不清是什么报错.mysqld --install安装了服务,也启动不了. ...
- 认识ASP.NET 5项目结构和项目文件xproj
ASP.NET 5 在项目结构上做了很大的改变,我们以前熟悉的目录结构与项目文件内容都不太一样了,本篇文章带大家了解 ASP.NET 5 到底跟以前有哪些不一样的地方. 我们先用 Visual Stu ...
- 一步步开发自己的博客 .NET版(5、Lucenne.Net 和 必应站内搜索)
前言 这次开发的博客主要功能或特点: 第一:可以兼容各终端,特别是手机端. 第二:到时会用到大量html5,炫啊. 第三:导入博客园的精华文章,并做分类.(不要封我) 第四:做 ...
- 从零开始,DIY一个jQuery(2)
在上篇文章我们简单实现了一个 jQuery 的基础结构,不过为了顺应潮流,这次咱把它改为模块化的写法,此举得以有效提升项目的可维护性,因此在后续也将以模块化形式进行持续开发. 模块化开发和编译需要用上 ...
- 【腾讯Bugly干货分享】Android进程保活招式大全
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57ac4a0ea374c75371c08ce8 作者:腾讯——张兴华 目前市面上 ...