前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ASP.NET Core模块概述

ASP.NET Core模块概述

作者头像
潘成涛
发布2018-01-18 11:49:06
1.7K0
发布2018-01-18 11:49:06
举报
文章被收录于专栏:程序员与猫

原文地址: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方法中,可以调用位于WebHostBuilderUseIISIntegration扩展方法

代码语言:javascript
复制
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服务。

下一步

更多的详细信息,请参考以下资源:

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ASP.NET Core 模块做了什么
  • 怎么在ASP.NET Core应用中使用ANCM
    • 安装 ANCM
      • 安装 IISIntegration NuGet 包
        • 调用 UseIISIntegration
          • 不要调用UseUrls
            • 在Web.config中设置ANCM选项
              • 在开发中借助IIS Express运行应用
              • 下一步
              相关产品与服务
              文件存储
              文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档