实现现代化ASP。 NET开启的 Web 表单应用程序 AWS - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

实现现代化ASP。 NET开启的 Web 表单应用程序 AWS

由 Vijai Anand Ramalingam () 和 Sreelaxmi Pai () AWS 创作 AWS

环境:PoC 或试点

技术:现代化;容器和微服务 DevelopmentAndTesting;Web 和移动应用程序

工作负载:Microsoft

AWS服务:亚马逊 CloudWatch;亚马逊ECS;S AWS ystems Manager

Summary

这种模式描述了对遗产巨石进行现代化改造的步骤。ASP NET将 Web 表单应用程序移植到ASP。 NETCore 开启AWS。

移植ASP。 NETWeb 表单应用程序可以ASP. NETCore 可帮助您充分利用 Linux 的性能、成本节约和强大的生态系统。不过,这可能需要大量的人工操作。在这种模式下,使用分阶段方法逐步实现传统应用程序的现代化,然后在云中进行容器化。AWS

考虑一个用于购物车的传统单体应用程序。假设它是作为ASP. NETWeb Forms 应用程序,由带有代码隐藏文件 () 的.aspx 页面组成。aspx.cs现代化过程包括以下步骤:

  1. 使用适当的分解模式将单体分解为微服务。有关更多信息,请参阅《规范指南》网站上的 “将巨石分解为微服务” 指南。AWS

  2. 移植你的遗产ASP。 NET网络表单 (. NET框架) 应用于ASP。 NETCore in。 NET5 或更高版本。在这种模式中,您可以使用 “移植助手”。 NET来扫描你的ASP。 NETWeb Forms 应用程序并识别与的不兼容之处。ASP NET核心。这减少了手动移植的工作量。

  3. 使用 React 重新开发 Web 表单用户界面层。此模式不涵盖 UI 重新开发。有关说明,请参阅 React 文档中的创建新的 React 应用程序

  4. 将 Web Forms 代码隐藏文件(业务界面)重新开发为。ASP NET核心网API。此模式使用NDepend报告来帮助识别所需的文件和依赖关系。

  5. 将旧版应用程序中的共享/通用项目(例如业务逻辑和数据访问)升级为。 NET5 或更高版本,使用移植助手。 NET。 

  6. 添加AWS服务以补充您的应用程序。例如,您可以使用 Amazon CloudWatch Logs 来监控、存储和访问应用程序的日志,使用 S AWSystems Manager 来存储您的应用程序设置。

  7. 容器化现代化改造。ASP NET核心应用程序。此模式在 Visual Studio 中创建一个面向 Linux 的 Docker 文件,并使用 Docker Desktop 在本地对其进行测试。此步骤假设您的旧版应用程序已在本地或亚马逊弹性计算云 (AmazonEC2) Windows 实例上运行。有关更多信息,请参阅模式 Run an ASP。 NET亚马逊 EC2 Linux 实例上的核心 Web API Docker 容器

  8. 部署现代化ASP的。 NET亚马逊弹性容器服务 (AmazonECS) 的核心应用程序。此模式不涵盖部署步骤。有关说明,请参阅 Amazon ECS 研讨会

注意:此模式不包括界面开发、数据库现代化或容器部署步骤。

先决条件和限制

先决条件

架构

实现购物车应用程序的现代化

下图说明了遗产的现代化过程ASP。 NET购物车应用程序。

对旧式购物车应用程序进行现代化改造

目标架构

下图说明了上现代化购物车应用程序的架构。AWSASP。 NET核心网络部署APIs到一个 Amazon ECS 集群。日志和配置服务由 Amazon CloudWatch Logs 和 S AWS ystems Manager 提供。

的目标架构ASP。 NET开启的 Web 表单应用程序 AWS

工具

AWS服务

  • Amaz on ECS — Amazon 弹性容器服务 (AmazonECS) 是一项高度可扩展、快速的容器管理服务,用于在集群上运行、停止和管理容器。您可以在由 Far AWS gate 管理的无服务器基础架构上运行任务和服务。或者,为了更好地控制您的基础架构,您可以在自己管理的EC2实例集群上运行任务和服务。

  • Amaz CloudWatch on CloudWatch Logs — Amazon Logs 集中您使用的所有系统、应用程序和AWS服务的日志。您可以查看和监控日志,搜索特定的错误代码或模式,根据特定字段过滤日志,或将日志安全存档以备将来分析。

  • AWSS yst AWS ems Manager ─ Systems Manager 是一项可用于查看和控制基础架构的AWS服务AWS。使用 Systems Manager 控制台,您可以查看来自多个AWS服务的操作数据,并自动执行跨AWS资源的操作任务。Systems Manager 通过扫描托管实例并报告其检测到的所有策略违规行为(或采取纠正措施)来帮助您维护安全性与合规性。

工具

  • Visual Stud io 或 Visual Studio 代码 — 构建工具 NET应用程序APIs、Web 和其他程序。

  • AWSVisual Studio 工具包 — Visual Studio 的扩展,可帮助开发、调试和部署。 NET使用AWS服务的应用程序。

  • Docker Desktop - 一种简化构建和部署容器化应用程序的工具。

  • NDepend— 用于监控的分析器。 NET依赖关系、质量问题和代码变更的代码。

  • 的@@ 移植助手 NET— 一种可以扫描的分析工具。 NET用于识别不兼容之处的代码。 NET核心并估算迁移工作量。

操作说明

任务描述所需技能

升级你的. NET将旧版应用程序框架化为. NET5。

你可以使用移植助手。 NET来转换你的遗产ASP。 NETWeb 表单应用程序适用于. NET5 或更高版本。请按照移植助手中的说明进行操作。 NET文档。

应用程序开发人员

生成NDepend报告。

当您实现现代化时ASP. NETWeb Forms 应用程序通过将其分解为微服务,您可能不需要旧应用程序中的所有.cs 文件。您可以使用NDepend为任何隐藏代码 (.cs) 的文件生成报告,以获取所有调用者和被调用者。此报告可帮助您仅识别和使用微服务中所需文件。

安装后NDepend(参见 “先决条件” 部分),在 Visual Studio 中打开旧版应用程序的解决方案(.sln 文件),然后按照以下步骤操作:

  1. 在 Visual Studio 中构建旧应用程序。

  2. 在 Visual Studio 菜单栏NDepend,选择 “将新NDepend项目附加到当前 VS 解决方案”。 

  3. 选择 “分析”。 NET集会。 

  4. 分析完成后,导航到解决方案资源管理器中的项目。右键单击要为其生成报告的任何代码隐藏文件(例如 listproducts.aspx.cs),然后选择在依赖关系图上显示。 

  5. 在导航栏中,选择调用者和被调用者,然后选择编辑代码查询。 

  6. 查询和规则编辑窗格中,选择下载箭头,然后选择导出到 Excel

此过程会生成代码隐藏文件的报告,其中列出了所有调用者和被调用者。有关依赖关系图的更多信息,请参阅NDepend文档

应用程序开发人员

创建一个新的。 NET5 个解决方案。

创建一个新的. NET5(或更高版本)结构供您进行现代化改造。ASP NET核心网页APIs:

  1. 打开 Visual Studio。

  2. 创建一个新的空白解决方案。

  3. 创建针对性的新项目。 NET5(或更高版本),基于您的旧版应用程序。有关购物车应用程序的旧项目和新项目的示例,请参阅其他信息部分。

  4. 使用上一步中的NDepend报告来识别所有必需的文件。从您之前升级的应用程序中复制这些文件,并将它们添加到新的解决方案中。

  5. 构建解决方案并解决所有问题。

有关创建项目和解决方案的详细信息,请参阅 Visual Studio 文档

注意在构建解决方案和验证功能时,除了已识别的文件外,您可能会NDepend发现要添加到解决方案中的其他几个文件。

应用程序开发人员
任务描述所需技能

使用实现APIs网络ASP。 NET核心。

假设您在旧版单体购物车应用程序中确定的微服务之一为产品。您创建了一个新的ASP。 NET上一篇长篇故事中产品的核心网络API项目。在此步骤中,您将识别和现代化与产品相关的所有 Web 窗体(.aspx 页面)。假设产品由四个 Web 表单组成,如前面的架构部分所示:

  • 列出产品

  • 查看产品

  • 添加/编辑产品

  • 删除产品

您应该分析每个 Web 表单,识别发送到数据库以执行某些逻辑的所有请求,并获取响应。您可以将每个请求作为 Web API 端点来实现。鉴于其 Web 表单,产品可以具有以下可能的端点:

  • /api/products

  • /api/products/{id}

  • /api/products/add

  • /api/products/update/{id}

  • /api/products/delete/{id}

如前所述,您还可以重复使用升级到的所有其他项目。 NET5,包括业务逻辑、数据访问和共享/通用项目。

应用程序开发人员

配置 Amazon CloudWatch 日志。

您可以使用 Amazon CloudWatch Logs 来监控、存储和访问应用程序的日志。您可以使用将数据记录到 Amazon CloudWatch Logs 中AWSSDK。你也可以整合。 NET使用流行的带有 CloudWatch 日志的应用程序。 NET日志框架 NLog,例如 Log4Net 和。ASP NET核心日志框架

有关此步骤的更多信息,请参阅博客文章 Amazon CloudWatch Logs 和。 NET日志框架

应用程序开发人员

配置 S AWS ystems Manager 参数存储。

您可以使用 AWSSystems Manager Parameter Store 将应用程序设置(例如连接字符串)与应用程序代码分开存储。Amazon.extens.Configurat NuGet SystemsManager简化了应用程序将这些设置从 S AWS ystems Manager 参数存储加载到的方式。 NET核心配置系统。 

有关此步骤的更多信息,请参阅博客文章。 NETS AWS ystems Manager 的核心配置提供商

应用程序开发人员
任务描述所需技能

使用共享 cookie 进行身份验证。

对旧版单体应用程序进行现代化改造是一个迭代过程,需要单体应用及其现代化版本共存。您可以使用共享 cookie 来实现两个版本之间的无缝身份验证。遗产ASP。 NET应用程序继续验证用户凭证并在现代化ASP期间发布 Cookie。 NET核心应用程序会验证 cookie。 

有关说明和示例代码,请参阅示例 GitHub 项目

应用程序开发人员
任务描述所需技能

使用 Visual Studio 创建 Docker 映像。

在此步骤中,您将使用适用的 Visual Studio 创建 Docker 文件。 NET核心网API。

  1. 打开 Visual Studio。 

  2. 在解决方案资源管理器中,从项目的上下文(右键单击)菜单中,依次选择添加、Docker 支持。

  3. 选择 Linux 作为目标操作系统

Visual Studio 为您的项目创建一个 Docker 文件。有关示例 Docker 文件,请参阅 Microsoft 网站上的 Visual Studio Container Tools for Docker

应用程序开发人员

使用 Docker Desktop 构建并运行容器。

现在您可以在 Docker Desktop 中构建、创建和运行容器。

  1. 打开 Command Prompt (命令提示符窗口)。导航到 Docker 文件所在的解决方案文件夹。请运行以下命令,创建 Docker 映像:

    docker build -t aspnetcorewebapiimage -f Dockerfile .
  2. 运行以下命令,查看所有 Docker 映像。

    docker images
  3. 运行以下命令,创建容器。

    docker run -d -p 8080:80 --name aspnetcorewebapicontainer aspnetcorewebapiimage
  4. 打开 Docker Desktop,然后选择容器/应用程序。您可以看到一个名为 aspnetcorewebapicontainer  的新容器正在运行。

应用程序开发人员

相关资源

其他信息

下表提供了旧版购物车应用程序的示例项目以及现代化ASP版本中的等效项目的示例。 NET核心应用程序。

传统解决方案:

项目名称

项目模板

目标架构

业务界面

类库

。 NET框架

BusinessLogic

类库

。 NET框架

WebApplication

ASP。 NET框架 Web 应用程序

。 NET框架

UnitTests

NUnit测试项目

。 NET框架

共享->通用

类库

。 NET框架

共享->框架

类库

。 NET框架

新解决方案:

项目名称

项目模板

目标架构

BusinessLogic

类库

。 NET5.0

<网页 > API

ASP。 NET核心网页 API

。 NET5.0

<网页 API >。 UnitTests

NUnit3 测试项目

。 NET5.0

共享->通用

类库

。 NET5.0

共享->框架

类库

。 NET5.0