ASP.NET Core和传统技术比较

ASP.NET Core和传统技术比较

使用 Asp.net core的分析

完全的跨平台,一套代码可以多个平台开发和运行

运行在跨平台.NET核心框架上的轻量级ASP.NET Core应用程序非常适合精简容器部署

与传统的ASP.NET框架相比,主要的好处是:

  1. 跨平台的开发和部署

  2. 作为一项功能的重点在性能

  3. 简化的托管模式

  4. 更快的版本

  5. 开源

  6. 模块化功能

了解跨平台应用程序的局限性非常重要 - 并不是所有的.NET Framework API都可以在.NET Core中使用。很可能您需要的大多数API将随着时间的推移而逐渐进入.NET Core,但是需要注意的一点很重要。

以前的ASP.NET框架的托管模式是相对复杂的,依靠Windows Internet Information Services(IIS)提供Web服务器托管。在跨平台的环境中,这种共生关系是不可能的,而且已经采用了另一种主机模式,它将Web应用程序与底层主机分开。Kestrel是一个可以运行ASP.NET Core的快速跨平台HTTP服务器,因此这个机会得到了发展。

如下图ASP.NET应用程序是一种控制台应用程序,它可以自主托管一个Web服务器并直接处理请求,而不是以前的设计,即IIS调用应用程序的特定点。从概念上讲要简单得多,并允许您从命令行测试和调试您的应用程序,尽管它并不删除在生产环境中运行IIS(或等效)的需要。

ASP.NET Core和传统技术比较

ASP.NET(顶部)和ASP.NET Core(底部)之间托管模型的区别。在以前的ASP.NET版本中,IIS与应用程序紧密耦合,为请求的不同阶段调用特定的公开方法。ASP.NET Core中的主机模型比较简单,IIS将请求转交给ASP.NET Core应用程序中的自托管Web服务器,并接收响应,但对应用程序没有更深入的了解。

将主机模型更改为使用内置的HTTP Web服务器已经创造了另一个机会。过去,性能一直是ASP.NET应用程序的一个难点。有可能构建高性能的应用程序 - 堆栈溢出(http://stackoverflow.com)是证明 - 但Web框架本身并没有设计性能作为优先事项,并可能最终成为一个障碍。

为了成为具有竞争力的跨平台,ASP.NET团队最近专注于尽可能快地制作Kestrel HTTP服务器。TechEmpower(www.techempower.com/benchmarks)几年来一直在运行各种语言的Web框架的基准测试。在十三个纯文本基准测试中,TechEmpower宣布,使用Kestrel的ASP.NET Core已成为当前速度最快的主流的Fullstack Web框架,并且是所有框架中前十名中最快的!

Web服务器 - 命名事情很难

目前网络编程的难点之一是混淆了一些常常相互冲突的术语。例如,如果您以前使用过IIS,则可能将其描述为Web服务器,或可能是Web主机。相反,如果您曾经使用node.js构建过应用程序,那么您可能也会将该应用程序称为Web服务器。或者,您可能已经调用了应用程序运行Web服务器的物理机器!

同样,您可能已经为互联网构建了一个应用程序,并将其称为网站或Web应用程序,可能根据其显示的活力水平而有些任意。

在本文中,当我在ASP.NET Core的上下文中说“web server”时,我指的是作为ASP.NET Core应用程序的一部分运行的HTTP服务器。默认情况下,这是Kestrel Web服务器,但不是必需的。如果你愿意的话,可以写一个替代的Web服务器,并用它代替Kestrel。

Web服务器负责接收HTTP请求并生成响应。在以前的ASP.NET版本中,IIS担当了这个角色,但在ASP.NET Core中,Kestrel是Web服务器。

我将只使用术语Web应用程序来描述ASP.NET Core应用程序,而不管它们是仅包含静态内容还是完全动态的。无论哪种方式,他们是通过网络访问的应用程序,这个名字似乎是适当的!

对Kestrel所做的许多性能改进并不是来自ASP.NET团队本身,而是来自GitHub开源项目的贡献者。开放式开发意味着您通常应该看到修补程序和功能部件的生产速度要比以前版本的ASP.NET更快,而ASP.NET以前的版本依赖于.NET Framework,因此具有较长的发布周期。

相比之下,ASP.NET Core完全与底层.NET平台分离。整个Web框架都是作为模块化NuGet包来实现的,它们可以独立进行版本化和更新(从构建它们的底层平台)。

为了实现这一点,ASP.NET Core被设计为高度模块化的,尽可能少地耦合到其他功能。这种模块化本身就是一种付费游戏的依赖方式,您可以从一个简单的应用程序开始,只添加您需要的附加库,而不是以前的ASP.NET应用程序的厨房接收器方法。即使MVC是一个可选的包!但是不要担心,这种方法并不意味着ASP.NET Core缺乏功能; 这只是意味着你需要选择这些功能。一些关键的基础设施改进包括:

  1. 中间件“管道”用于定义应用程序的行为

  2. 内置支持依赖注入

  3. 结合了UI(MVC)和API(Web API)基础结构

  4. 高度可扩展的配置系统

  5. 使用异步编程默认可扩展为云平台

在以前的ASP.NET版本中,每个功能都是可能的,但是需要大量额外的工作来设置。有了ASP.NET Core,他们就在那里,准备好并等待着连接!

微软完全支持ASP.NET Core,如果你想建立一个新的系统,没有什么重要的理由不这样做。您可能遇到的最大障碍是第三方库阻止您,因为他们只支持旧的ASP.NET功能,或者他们还没有转换到.NET Core的工作。

移植旧程序的难点:

  1. 您的应用程序使用ASP.NET Web窗体

  2. 您的应用程序建立在Web页面,WCF,SignalR或VB.NET上

  3. 您的应用程序很大,具有许多“高级”MVC功能

什么是ASP.NET Core?

ASP.NET Core的动机是希望创建一个具有四个主要目标的Web框架:

  1. 要运行和开发跨平台

  2. 有一个模块化的架构,更容易维护

  3. 作为开源软件完全开发。

  4. 适用于Web开发的当前趋势,如客户端应用程序和部署到云环境。

为了实现所有这些目标,Microsoft需要一个平台,可以提供用于创建诸如列表和词典之类的基本对象的基础库,并执行简单的文件操作。到目前为止,ASP.NET开发一直专注于并依赖于仅限于Windows的.NET Framework。对于ASP.NET Core,Microsoft创建了一个在Windows,Linux和macOS上运行的轻量级平台,称为.NET Core,如图1.2所示。

ASP.NET Core,ASP.NET,.NET Core和.NET Framework之间的关系 ASP.NET Core在.NET Framework和.NET Core上运行,因此可以运行跨平台。相反,ASP.NET仅在.NET Framework上运行,因此与Windows OS绑定。

ASP.NET Core和传统技术比较

.NET Core与.NET Framework共享许多相同的API,但它更小,目前只实现了.NET Framework提供的一部分功能,目的是提供更简单的实现和编程模型。它是一个全新的平台,而不是.NET Framework的一个分支,虽然它为许多API使用非常类似的代码。

单独使用.NET Core可以构建跨平台的控制台应用程序。微软创建了ASP.NET Core作为控制台应用程序的附加层,因此转换为Web应用程序只需简单地添加和组合库,如图所示。

ASP.NET核心应用程序模型。.NET Core平台为运行命令行应用程序提供了一个基本控制台应用程序模型。添加Web服务器库将其转换为ASP.NET Core Web应用程序。其他功能,如配置和日志记录,通过附加库添加。

ASP.NET Core和传统技术比较

通过将ASP.NET Core Web服务器添加到.NET Core应用程序,您的应用程序可以作为Web应用程序运行。ASP.NET Core由许多小型库组成,您可以从这些小型库中为应用程序提供不同的功能。你很少需要所有可用的库,你只需要添加你需要的东西。有些库是非常常见的,几乎会出现在您创建的每个应用程序中,例如用于读取配置文件或执行日志记录的应用程序。其他库建立在这些基本功能之上,以提供应用程序特定的功能,例如通过Facebook或Google进行的第三方登录。

定义

反向代理是负责接收请求并将其转发到适当的Web服务器的软件。反向代理直接暴露给互联网,而底层Web服务器只暴露给代理。这个设置有几个好处,主要是Web服务器的安全性和性能。

ASP.NET核心应用程序如何处理请求。从反向代理中的bowser收到请求,该请求将请求传递给运行自托管Web服务器的ASP.NET Core应用程序。Web服务器处理请求并将其传递给应用程序的主体,该应用程序生成响应并将其返回给Web服务器。Web服务器将其中继到反向代理,反向代理将响应发送到浏览器。

ASP.NET Core和传统技术比较

请求从反向代理转发到您的ASP.NET Core应用程序。每个ASP.NET Core应用程序都有一个内置的Web服务器,Kestrel默认情况下负责接收原始请求并构建数据的内部表示,这个HttpContext对象可以被其他应用程序使用。

从这个表示中,你的应用程序应该有它需要的所有细节来创建一个适当的请求响应。它可以使用存储的详细信息HttpContext生成适当的响应,这可能是生成一些HTML,返回“拒绝访问”消息或发送电子邮件,这些都取决于您的应用程序的要求。

一旦应用程序处理完请求,它就会将响应返回给Web服务器。ASP.NET Core Web服务器会将表示形式转换为原始HTTP响应,并将其发送回反向代理,反向代理将转发给用户的浏览器。

这个过程对于用户来说似乎与前面图1.7所示的通用HTTP请求相同 - 用户发送了一个HTTP请求并收到一个HTTP响应。所有的差异都是服务器端,在我们的应用程序内。

您可能会认为有一个反向代理和一个Web服务器有点多余。为什么不只是有一个或另一个?那么好处之一是你的应用程序从底层操作系统中解耦。相同的ASP.NET Core Web服务器Kestrel可以跨平台,并且可以在各种代理之后使用,而不会对特定实现施加任何限制。或者,如果您编写了一个新的ASP.NET Core Web服务器,则可以使用它替代Kestrel,而无需更改应用程序的其他任何内容。

反向代理的另一个好处是它可以抵御来自公共互联网的潜在威胁。他们通常负责其他方面,例如重新启动已经崩溃的进程。Kestrel可以作为一个简单的HTTP服务器,而不必担心这些额外的功能,当它在反向代理后面使用。把它看作是一个简单的问题分离; Kestrel关心的是生成HTTP响应,反向代理关心处理与互联网的连接。

您已经看到请求和响应如何找到自己的方式来自和从ASP.NET核心应用程序,但我还没有涉及如何产生的响应。在本书的第1部分中,我将展示组成典型ASP.NET Core应用程序的各种组件,以及它们如何组合在一起。很多内容都是在ASP.NET Core中产生响应,通常在几分之一秒内完成,但是在本书的过程中,我们将慢慢地逐步介绍一个应用程序,详细介绍每个组件。

在我们介入之前,您需要为您的第一个ASP.NET Core应用程序选择一个底层平台,并设置一个构建它的开发环境。

总结:

  • ASP.NET Core是一个以现代软件架构实践和模块化为重点的新型Web框架。

  • 最好用于新的“绿地”项目,外部依赖很少。

  • 现有的技术,如WCF,SignalR和VB.NET目前不能用于ASP.NET Core,但正在进行整合它们的工作。

  • 获取网页涉及发送HTTP请求并接收HTTP响应。

  • ASP.NET Core允许动态构建对给定请求的响应。

  • ASP.NET核心应用程序包含一个Web服务器,作为请求的入口点。

  • 反向代理服务器将ASP.NET Core应用程序从互联网上保护,反向代理服务器将请求转发给应用程序。

  • ASP.NET Core可以在.NET Framework和.NET Core上运行。如果您需要Windows注册表等特定于Windows的功能,则应使用.NET Framework,但无法运行跨平台。否则,请选择.NET Core作为最大覆盖范围和托管选项。

  • OmniSharp项目为许多流行的编辑器提供了C#编辑插件,包括跨平台的Visual Studio代码编辑器。

  • 在Windows上,Visual Studio提供了最完整的一体化ASP.NET Core开发体验,但使用命令行和编辑器进行开发与其他平台一样简单。


分享到:


相關文章: