Руководство. Добавление .NET Aspire в существующее приложение .NET
Если у вас есть микрослужбы и веб-приложение .NET, вы можете добавить в него .NET Aspire и получить все включенные функции и преимущества. В этой статье вы добавите оркестрацию .NET Aspire в простой, уже существующий проект .NET 9. Вы узнаете, как:
- Изучите структуру существующего приложения микрослужб.
- Включите существующие проекты в оркестрацию .NET.NET Aspire.
- Поймите, какие изменения в проектах вносит регистрация.
- Запустите проект .NET.NET Aspire.
Необходимые условия
Для работы с .NET.NET Aspireвам потребуется следующее, должно быть установлено локально:
- .NET 8.0 или .NET 9.0
- Среда выполнения контейнера, совместимая с OCI, например:
- Docker настольный компьютер или Podman. Дополнительные сведения см. в среде выполнения контейнера .
- Интегрированная среда разработки (IDE) или редактор кода, например:
- Visual Studio 2022 версия 17.9 или выше (необязательно)
-
Visual Studio Code (необязательно)
- C# Dev Kit: расширение (необязательно)
- JetBrains Rider с подключаемым модулем .NET.NET Aspire (необязательно)
Дополнительные сведения см. в разделе программы установки и инструментов .NET.NET Aspire, и пакета SDK .NET.NET Aspire.
Начало работы
Начнем с получения кода для решения:
Откройте командную строку и измените каталоги на место хранения кода.
Чтобы клонировать в .NET9 пример решения, используйте следующую команду
git clone
.git clone https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative-devops.git eShopLite
Изучение примера приложения
В этой статье используется решение .NET 9 с тремя проектами:
-
сущности данных. Этот проект является примером библиотеки классов. Он определяет класс
Product
, используемый в веб-приложении и веб-API. - Products: Этот пример веб-API возвращает список продуктов в каталоге и их свойства.
- Store: в этом примере веб-приложение Blazor демонстрирует каталог товаров посетителям веб-сайта.
Откройте и запустите отладку проекта, чтобы проверить его поведение по умолчанию:
Запустите Visual Studio и выберите Файл>Открыть>Проект/Решение.
Перейдите в папку верхнего уровня клонированного решения, выберите eShopLite.sln, а затем выберите Открыть.
В окне Обозревателя решенийщелкните правой кнопкой мыши по решению eShopLite, а затем выберите Настройка запускаемых проектов.
Выберите Несколько стартовых проектов.
В столбце действия выберите Start как для проекта Products, так и для проекта Store.
Выберите [] ОК [].
Чтобы начать отладку решения, нажмите F5 или выберите Пуск.
Две страницы открываются в браузере:
- Страница отображает продукты в JSON формате из вызова веб-API продуктов.
- Страница отображает домашнюю страницу веб-сайта. В меню слева выберите Products, чтобы просмотреть каталог, полученный из веб-API.
Чтобы остановить отладку, закройте браузер.
Запустите Visual Studio Code и откройте клонированную папку. В терминале, где клонирован репозиторий, выполните следующую команду:
code .
Выберите пункт меню запуска и отладки
или нажмите клавиши CTRL SHIFT D .Выберите , чтобы создать запуск. Ссылка на файлjson.
Скопируйте и вставьте следующий JSON в этот файл и затем сохраните.
{ "version": "0.2.0", "compounds": [ { "name": "Run all", "configurations": [ "Run products", "Run store", ] } ], "configurations": [ { "name": "Run products", "type": "dotnet", "request": "launch", "projectPath": "${workspaceFolder}/Products/Products.csproj" }, { "name": "Run store", "type": "dotnet", "request": "launch", "projectPath": "${workspaceFolder}/Store/Store.csproj" } ] }
Чтобы начать отладку решения, нажмите F5 или выберите Пуск.
Две страницы открываются в браузере:
- Страница отображает продукты в JSON формате из вызова веб-API продуктов.
- Страница отображает домашнюю страницу веб-сайта. В меню слева выберите Products, чтобы просмотреть каталог, полученный из веб-API.
Чтобы остановить отладку, закройте браузер и нажмите кнопку Остановить дважды (по одному разу для каждого запущенного экземпляра отладки).
Откройте окно терминала и перейдите в каталог недавно клонированного репозитория.
Чтобы запустить приложение продуктов, выполните следующую команду:
dotnet run --project ./Products/Products.csproj
Откроется страница браузера, отображающая JSON для указанных продуктов.
В отдельном окне терминала снова измените каталоги на клонированные репозитории.
Запустите приложение Store, выполнив следующую команду:
dotnet run --project ./Store/Store.csproj
В браузере откроется страница, отображающая домашнюю страницу веб-сайта. В меню слева выберите Products, чтобы просмотреть каталог, полученный из веб-API.
Чтобы остановить отладку, закройте браузер и нажмите клавиши CTRL +C в обоих терминалах.
Добавление .NET.NET Aspire в веб-приложение Магазина
Теперь давайте включим проект Store, который реализует веб-интерфейс, в оркестрацию .NET.NET Aspire.
В
в обозревателе решений щелкните правой кнопкой мыши проект Store , выберитеДобавить , а затем выберите .службу поддержки Orchestrator В диалоговом окне Добавление .NET.NET Aspire поддержки Orchestrator выберите ОК.
Теперь у вас должны быть два новых проекта, которые добавлены в решение:
- eShopLite.AppHost: проект оркестратора, предназначенный для подключения и настройки различных проектов и служб приложения. Оркестратор устанавливается в качестве проекта запуска, и он зависит от проекта eShopLite.Store.
- eShopLite.ServiceDefaults: .NET.NET Aspire общий проект для управления конфигурациями, которые повторно используются в проектах вашего решения, связанных с устойчивостью, обнаружениемслужб и телеметрией.
В проекте eShopLite.AppHost
builder.AddProject<Projects.Store>("store");
Дополнительные сведения см. в разделе AddProject.
Чтобы добавить проект Products в .NET.NET Aspire:
В
вобозревателя решений щелкните проект продуктов правой кнопкой мыши, выберитеДобавить , а затем выберите .службу поддержки Orchestrator Диалоговое окно указывает, что проект .NET.NET Aspire для Оркестратора уже существует, нажмите ОК.
В проекте eShopLite.AppHost
builder.AddProject<Projects.Products>("products");
Кроме того, обратите внимание, что проект eShopLite.AppHost теперь зависит от проектов Store и Products.
Создайте проект размещения приложения
Для оркестрации существующих проектов необходимо создать новый проект узла приложений . Чтобы создать новый узел приложения проекта из доступных шаблонов .NET Aspire, выполните следующую команду .NET CLI:
dotnet new aspire-apphost -o eShopLite.AppHost
Добавьте проект размещения приложения к существующему решению:
Добавьте проект Магазина в качестве ссылки на проект узла приложения с помощью следующей команды CLI .NET:
Создать проект настроек службы по умолчанию
После создания проекта узла приложения необходимо создать новый проект службы с параметрами по умолчанию. Чтобы создать новую службу по умолчанию проект из доступных шаблонов .NET Aspire, выполните следующую команду .NET CLI:
dotnet new aspire-servicedefaults -o eShopLite.ServiceDefaults
Чтобы добавить проект в решение, используйте следующую команду .NET CLI:
dotnet sln ./eShopLite.sln add ./eShopLite.ServiceDefaults/eShopLite.ServiceDefaults.csproj
Обновите проект узла приложения
dotnet add ./eShopLite.AppHost/eShopLite.AppHost.csproj reference ./Products/Products.csproj
Проекты Store и Products должны ссылаться на проект service defaults, чтобы они могли легко включать поиск служб. Чтобы добавить ссылку на службу по умолчанию проекта в проекте Store, используйте следующую команду cli .NET:
dotnet add ./Store/Store.csproj reference ./eShopLite.ServiceDefaults/eShopLite.ServiceDefaults.csproj
Одна и та же команда с немного разными путями должна использоваться для добавления ссылки на проект службы
dotnet add ./Products/Products.csproj reference ./eShopLite.ServiceDefaults/eShopLite.ServiceDefaults.csproj
В проектах Store и Products обновите их файлы Program.cs, добавив следующую строку непосредственно после строки var builder = WebApplication.CreateBuilder(args);
:
builder.AddServiceDefaults();
Обновление проекта хоста приложения
Откройте файл Program.cs узла приложения проекта и замените его содержимое следующим кодом C#:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddProject<Projects.Store>("store");
builder.AddProject<Projects.Products>("products");
builder.Build().Run();
Предыдущий код:
- Создает новый экземпляр
DistributedApplicationBuilder
. - Добавляет проект Store в систему оркестрации.
- Добавляет проект продуктов в оркестратор.
- Создает и запускает оркестратор.
Обнаружение служб
На этом этапе оба проекта являются частью оркестрации .NET.NET Aspire, но Store должен быть в состоянии обнаружить адрес backend для продуктов с помощью .NET.NET Aspireобнаружения служб. Чтобы включить обнаружение сервисов, откройте файл Program.cs в eShopLite.AppHost и обновите код, который Магазин добавляет ссылку на проект Products:
var builder = DistributedApplication.CreateBuilder(args);
var products = builder.AddProject<Projects.Products>("products");
builder.AddProject<Projects.Store>("store")
.WithExternalHttpEndpoints()
.WithReference(products);
builder.Build().Run();
Предыдущий код выражает, что проект Магазин зависит от проекта Продукты. Для получения дополнительной информации см. раздел .NET.NET Aspire в хосте приложения: справочные материалы. Эта ссылка используется, чтобы обнаружить адрес проекта продуктов . Кроме того, проект Store настроен для использования внешних конечных точек HTTP. Если вы позже решите развернуть это приложение, вам потребуется вызов WithExternalHttpEndpoints, чтобы убедиться, что оно является видимым извне.
Затем обновите appsettings.json в проекте Магазина следующим образом JSON:
{
"DetailedErrors": true,
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ProductEndpoint": "http://products",
"ProductEndpointHttps": "https://products"
}
Адреса обеих конечных точек теперь используют имя "products", которое было добавлено в оркестратор в узле приложения. Эти имена используются для обнаружения адреса проекта Products.
Исследуйте подключённое приложение
Давайте начнем решение и рассмотрим новое поведение, которое .NET.NET Aspire предоставляет.
Заметка
Обратите внимание, что проект eShopLite.AppHost является новым стартовым проектом.
- Чтобы начать отладку, нажмите Visual Studioклавишу F5 F5Visual Studio создает проекты.
- Если появится диалоговое окно Docker "Рабочий стол" , выберите Да. Visual Studio запускает подсистему Docker и создает необходимые контейнеры. По завершении развертывания отображается панель мониторинга .NET.NET Aspire.
- На панели мониторинга выберите точку подключения для проекта продуктов
. Откроется новая вкладка браузера и отображает каталог продуктов в JSON формате. - На панели мониторинга выберите конечную точку для хранилища проекта. Откроется новая вкладка браузера и отображается домашняя страница веб-приложения.
- В меню слева выберите Продукты. Отображается каталог продуктов.
- Чтобы остановить отладку, закройте браузер.
Удалите запуск .json созданный ранее файл больше не служит цели. Вместо этого запустите проект узла приложения
Запустите проект приложения
, щелкнув правой кнопкой мыши проект eShopLite.AppHost в обозревателе решенийи выбрав Отладка запустить новый экземпляр :Заметка
Если Docker рабочий стол (или Podman) не запущен, вы получите ошибку. Запустите подсистему контейнеров, совместимую с OCI, и повторите попытку.
Запустите проект узла приложения
, выполнив следующую команду: dotnet run --project ./eShopLite.AppHost/eShopLite.AppHost.csproj
Заметка
Если Docker рабочий стол (или Podman) не запущен, вы получите ошибку. Запустите подсистему контейнеров, совместимую с OCI, и повторите попытку.
- На панели мониторинга выберите точку подключения для проекта продуктов
. Откроется новая вкладка браузера и отображает каталог продуктов в JSON формате. - На панели мониторинга выберите конечную точку для хранилища проекта. Откроется новая вкладка браузера и отображается домашняя страница веб-приложения.
- В меню слева выберите Продукты. Отображается каталог продуктов.
- Чтобы остановить отладку, закройте браузер.
Поздравляем, вы добавили .NET.NET Aspire механизм оркестрации в ранее существующее веб-приложение. Теперь вы можете добавить .NET Aspire интеграции и использовать средства .NET Aspire для упрощения разработки веб-приложений на основе облака.
.NET Aspire