Поэтапное обновление 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.
После настройки приложения ASP.NET Core с помощью YARP можно начать обновление маршрутов из ASP.NET Framework в ASP.NET Core. Например, методы действий контроллера WebAPI или MVC, обработчики или другая реализация маршрута. Если маршрут доступен в приложении ASP.NET Core, он соответствует и обслуживается.
Во время процесса миграции определяются дополнительные службы и инфраструктура, которые необходимо обновить для запуска в .NET Core. Варианты, перечисленные в порядке пригодности для обслуживания, включают:
- Перемещение кода в общие библиотеки
- Свяжите код в новом проекте
- Дублирование кода
В конечном итоге приложение ASP.NET Core обрабатывает больше маршрутов, чем приложение .NET Framework:
После того как приложение 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 для настройки поведения APISystem.Web
, а также для включения любых дополнительных особенностей в процессе поэтапной миграции. Обычно не ожидается, что это будет использоваться из библиотек, а из самих приложений. -
Microsoft.AspNetCore.SystemWebAdapters.Abstractions
. Этот пакет является вспомогательным пакетом, предоставляющим абстракции для служб, используемых как приложением ASP.NET Core, так и ASP.NET Framework, например сериализация состояния сеанса.
Примеры сценариев, в которых это полезно, см. в статье об адаптерах.
Рекомендации по использованию можно найти в статье раздела.
Дополнительные ресурсы
ASP.NET Core