Поделиться через


Поэтапное обновление c ASP.NET на ASP.NET Core

Обновление приложения из ASP.NET Framework до ASP.NET Core не является тривиальным для большинства рабочих приложений. Эти приложения часто включают новые технологии по мере их доступности и часто состоят из многих устаревших решений. В этой статье содержатся рекомендации и ссылки на средства обновления приложений ASP.NET Framework до ASP.NET Core с минимальными изменениями.

Одной из более крупных проблем является широкое использование HttpContext во всей базе кода. Без поэтапного подхода и инструментов потребуется крупномасштабное переписывание для удаления зависимости HttpContext. Адаптеры в dotnet/systemweb-adapters предоставляют набор вспомогательных средств выполнения для доступа к типам, используемым в приложениях ASP.NET Framework, так чтобы они работали в ASP.NET Core с минимальными изменениями.

Полная миграция может потребовать значительных усилий в зависимости от размера приложения, зависимостей и непереносимых API. Для продолжения развертывания приложения в производственной среде во время работы над обновлением лучше всего использовать шаблон Strangler Fig. Шаблон Strangler Fig позволяет осуществлять непрерывное развитие в старой системе с применением поэтапного подхода к замене определённых элементов функциональности новыми сервисами. В этом документе описывается применение шаблона Strangler Fig к ASP.NET приложению, обновляемого на ASP.NET Core.

Если вы хотите пропустить эту обзорную статью и сразу начать, смотрите раздел Начало работы.

Миграция приложений в ASP.NET Core

Перед началом миграции приложение предназначено для ASP.NET Framework и запускается в Windows со своими вспомогательными библиотеками:

Перед началом миграции

Миграция начинается с внедрения нового приложения на основе ASP.NET Core, которое становится точкой входа. Входящие запросы поступают в приложение ASP.NET Core, которое либо обрабатывает запрос, либо передаёт его приложению .NET Framework через YARP. Во-первых, большинство кода, предоставляющих ответы, находится в приложении .NET Framework, но теперь приложение ASP.NET Core настроено для запуска миграции маршрутов:

начать обновление маршрутов

Чтобы перенести бизнес-логику, основанную на HttpContext, необходимо создать библиотеки с помощью Microsoft.AspNetCore.SystemWebAdapters. Создание библиотек с помощью SystemWebAdapters позволяет:

  • Библиотеки, созданные для .NET Framework, .NET Core или .NET Standard 2.0.
  • Гарантирует, что библиотеки используют API, доступные как в ASP.NET Framework, так и в ASP.NET Core.

Microsoft.AspNetCore.SystemWebAdapters

После настройки приложения ASP.NET Core с помощью YARP можно начать обновление маршрутов из ASP.NET Framework в ASP.NET Core. Например, методы действий контроллера WebAPI или MVC, обработчики или другая реализация маршрута. Если маршрут доступен в приложении ASP.NET Core, он соответствует и обслуживается.

Во время процесса миграции определяются дополнительные службы и инфраструктура, которые необходимо обновить для запуска в .NET Core. Варианты, перечисленные в порядке пригодности для обслуживания, включают:

  1. Перемещение кода в общие библиотеки
  2. Свяжите код в новом проекте
  3. Дублирование кода

В конечном итоге приложение ASP.NET Core обрабатывает больше маршрутов, чем приложение .NET Framework:

приложение ASP.NET Core обрабатывает больше маршрутов

После того как приложение ASP.NET Framework больше не требуется и удаляется:

  • Приложение работает в стеке приложений ASP.NET Core, но по-прежнему использует адаптеры.
  • Оставшаяся работа по миграции заключается в прекращении использования адаптеров.

окончательное изображение

Расширение Visual Studio помощник по обновлению .NET может помочь обновить веб-приложения ASP.NET Framework до ASP.NET Core. Дополнительные сведения см. в блоге об обновлении проектов .NET с помощью Visual Studio.

System.Web Adapters

Пространство имен Microsoft.AspNetCore.SystemWebAdapters — это коллекция вспомогательных средств среды выполнения, которые упрощают использование кода, написанного на System.Web при переходе к ASP.NET Core. Существует несколько пакетов, которые могут использоваться для использования функций из этих адаптеров:

  • Microsoft.AspNetCore.SystemWebAdapters. Этот пакет используется в поддерживающих библиотеках и предоставляет API System.Web, от которых вы могли стать зависимыми, таких, как HttpContext и другие. Этот пакет предназначен для .NET Standard 2.0, .NET 4.5+ и .NET 6+.
  • Microsoft.AspNetCore.SystemWebAdapters.FrameworkServices. Этот пакет предназначен только для .NET Framework и предназначен для предоставления служб приложениям ASP.NET Framework, которые могут потребоваться для добавочной миграции. Обычно не предполагается, что на это будут ссылаться из библиотек, а из самих приложений.
  • Microsoft.AspNetCore.SystemWebAdapters.CoreServices. Этот пакет предназначен только для .NET 6+ и предназначен для предоставления служб для приложений ASP.NET Core для настройки поведения API System.Web, а также для включения любых дополнительных особенностей в процессе поэтапной миграции. Обычно не ожидается, что это будет использоваться из библиотек, а из самих приложений.
  • Microsoft.AspNetCore.SystemWebAdapters.Abstractions. Этот пакет является вспомогательным пакетом, предоставляющим абстракции для служб, используемых как приложением ASP.NET Core, так и ASP.NET Framework, например сериализация состояния сеанса.

Примеры сценариев, в которых это полезно, см. в статье об адаптерах.

Рекомендации по использованию можно найти в статье раздела.

Дополнительные ресурсы