.NET и .NET Framework для серверных приложений

Для создания серверных приложений доступны две поддерживаемые реализации .NET.

Внедрение Включенные версии
.NET .NET Core 1.0–3.1, .NET 5 и более поздние версии .NET.
.NET Framework .NET Framework 1.0–4.8

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

Используйте среду .NET для создания серверных приложений в следующих случаях:

  • для создания кроссплатформенных решений;
  • для создания решений, ориентированных на микрослужбы;
  • при использовании контейнеров Docker;
  • если нужны масштабируемые системы с высокой производительностью;
  • для создания приложений с поддержкой разных версий .NET.

Используйте среду .NET Framework для создания серверных приложений в следующих случаях:

  • приложение в настоящий момент использует среду .NET Framework (мы рекомендуем расширять приложения, а не переносить их в другую среду);
  • приложение использует сторонние библиотеки или пакеты NuGet, недоступные для .NET;
  • приложение использует технологии .NET Framework, недоступные для .NET;
  • приложение использует платформу, не поддерживающую .NET.

Случаи использования .NET

В следующих разделах более подробно описаны ранее перечисленные причины для выбора платформы .NET вместо .NET Framework.

Создание кроссплатформенных приложений

Если веб-приложение или служба будут работать на нескольких платформах (Windows, Linux и macOS), используйте платформу .NET.

В среде .NET также можно использовать упомянутые ранее операционные системы в качестве рабочих станций для разработки. Visual Studio предоставляет интегрированную среду разработки (IDE) для Windows и macOS. Можно также использовать редактор Visual Studio Code, который выполняется на платформах macOS, Linux и Windows. Visual Studio Code поддерживает .NET, включая технологию IntelliSense и отладку. С .NET работает большинство сторонних редакторов, например Sublime, Emacs и VI. Эти сторонние редакторы получают доступ к функциям в редакторе IntelliSense с помощью Omnisharp. Вы также можете избежать любого редактора кода и напрямую использовать интерфейс командной строки .NET, доступный для всех поддерживаемых платформ.

Архитектура микрослужб

Архитектура микрослужб позволяет использовать сочетание технологий за пределами службы. Такое сочетание технологий позволяет постепенно добавлять новые микрослужбы в .NET для параллельного использования с другими службами и микрослужбами. Например, можно комбинировать микрослужбы или службы, созданные на основе .NET Framework, Java, Ruby или других монолитные технологий.

Пользователям на выбор предоставляется множество инфраструктурных платформ. Для больших и сложных систем микрослужб можно использовать Azure Service Fabric. Служба приложений Azure лучше всего подойдет для микрослужб без сохранения состояния. Альтернативы микрослужб на основе Docker соответствуют любому подходу микрослужб, как описано в разделе "Контейнеры ". Все эти платформы поддерживают .NET и идеально подходят для размещения микрослужб.

Дополнительные сведения об архитектуре микрослужб см. в статье .NET Microservices. Архитектура контейнерных приложений .NET.

Контейнеры

Контейнеры обычно используются с архитектурой микрослужб. Их также можно использовать, чтобы поместить в контейнер веб-приложения или службы на базе любого архитектурного шаблона. платформа .NET Framework можно использовать в контейнерах Windows. Тем не менее, модульность и упрощенная природа .NET делают его лучшим выбором для контейнеров. При создании и развертывании контейнера размер его образа гораздо меньше, чем с платформа .NET Framework. Так как это кроссплатформенная платформа, вы можете развернуть серверные приложения в контейнерах Docker для Linux.

Контейнеры Docker можно размещать в собственной инфраструктуре Linux или Windows или в облачной службе, например Служба Azure Kubernetes. Служба Azure Kubernetes может выполнять оркестрацию и масштабировать приложения на основе контейнеров, а также управлять ими в облаке.

Масштабируемые системы с высокой производительностью

Если для вашей системы требуется максимальная производительность и возможности масштабирования, мы рекомендуем использовать среды .NET и ASP.NET Core. Среда выполнения высокопроизводительного сервера для Windows Server и Linux делает ASP.NET Core наиболее высокопроизводительной веб-платформой на тестах TechEmpower.

Производительность и масштабируемость особенно важны для архитектур микрослужб, где могут работать сотни микрослужб. Среда ASP.NET Core позволяет уменьшить количество серверов и виртуальных машин, необходимых для системы. Сокращение серверов и виртуальных машин экономит затраты на инфраструктуру и размещение.

Параллельные версии .NET на уровне приложения

Если требуется установить приложения с зависимостями в разных версиях платформ .NET, рекомендуется использовать среду .NET. Эта реализация поддерживает параллельное установку разных версий среды выполнения .NET на одном компьютере. Параллельное установка позволяет нескольким службам на одном сервере, каждая из которых имеет собственную версию .NET. Это позволяет устранить риски и сократить расходы на обновление приложений и ИТ-операции.

Параллельная установка невозможна при использовании .NET Framework. Это компонент Windows, и на компьютере может существовать только одна версия этого компонента. Каждая версия .NET Framework заменяет предыдущую версию. Если вы устанавливаете новое приложение, предназначенное для более поздней версии платформа .NET Framework, вы можете разорвать существующие приложения, которые выполняются на компьютере, так как предыдущая версия была заменена.

Случаи использования .NET Framework

Среда .NET предоставляет значительные преимущества для новых приложений и шаблонов приложений. Но платформа .NET Framework остается оптимальным выбором во многих ситуациях, поэтому .NET не заменит .NET Framework для всех серверных приложений.

Готовые приложения .NET Framework

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

Сторонние библиотеки .NET и пакеты NuGet, недоступные для .NET

.NET Standard позволяет совместно использовать код во всех реализациях .NET, включая .NET Core/5+. В .NET Standard 2.0 этот режим совместимости позволяет проектам .NET Standard и .NET ссылаться на библиотеки .NET Framework. Дополнительные сведения см. в статье Поддержка библиотек платформы .NET Framework.

Платформу .NET Framework следует применять только в случаях, где библиотеки или пакеты NuGet используют технологии, которые недоступны в .NET Standard и .NET.

Технологии .NET Framework, недоступные в .NET

Некоторые технологии .NET Framework недоступны в среде .NET. Ниже приведен список самых распространенных технологий, которые недоступны в .NET:

  • ASP.NET веб-формы приложения: ASP.NET веб-формы доступны только в платформа .NET Framework. ASP.NET Core нельзя использовать для ASP.NET веб-формы.

  • веб-страницы ASP.NET приложения: веб-страницы ASP.NET не включены в ASP.NET Core.

  • Службы, связанные с рабочими процессами: Windows Workflow Foundation (WF), Службы рабочих процессов (WCF + WF в одной службе) и службы данных WCF (прежнее название — "службы данных ADO.NET") доступны только в платформа .NET Framework.

  • Поддержка языка: Visual Basic и F# в настоящее время поддерживаются в .NET, но не для всех типов проектов. Список поддерживаемых шаблонов проектов см. в статье о параметрах шаблона для dotnet new.

Дополнительные сведения см. в статье Технологии .NET Framework, недоступные в .NET Core и .NET 5 и более поздних версий.

Платформа не поддерживает .NET

Некоторые платформы Майкрософт и платформы сторонних поставщиков не поддерживают среду .NET. Некоторые службы Azure предоставляют пакеты SDK, недоступные в среде .NET. В таких случаях в качестве альтернативы клиентскому пакету SDK можно использовать REST API.

См. также