четверг, 30 июля 2026 г.

Dapr, Start Project, Aspire, AppHost

Dapr, Start Project, Aspire, AppHost

https://chat.deepseek.com/a/chat/s/7687913a-329e-41d3-8e09-fd83eb9e9de1

Описанная ситуация — вы запускаете не AppHost, а проект ApiService.
В логах видны адреса https://localhost:7539 и http://localhost:5452 — это порты ApiService, а не оркестратора. Панель управления Aspire (Dashboard) запускается только при старте AppHost.

🔍 Что происходит

  • В решении несколько проектов, и по умолчанию (или случайно) активным выбран AspireApp1.ApiService.

  • Вы нажимаете F5 / Ctrl+F5 → запускается только API-сервис, в консоли отображаются его логи.

  • Сам AppHost не стартует → Dashboard не появляется, другие ресурсы (WebFrontend) не поднимаются.

  • Именно поэтому «висит» — API-сервис запущен, но веб-интерфейса нет, а AppHost некому запустить.

✅ Решение

  1. Сделайте проект AspireApp1.AppHost стартовым:

    • В Solution Explorer правый клик на AspireApp1.AppHostSet as Startup Project.

    • Убедитесь, что файл AppHost.cs открыт или в списке проектов выделен AppHost.

  2. Запустите решение (F5 или Ctrl+F5).
    Теперь в консоли вы увидите:

    text
    info: Aspire.Hosting.DistributedApplication[0]
          Now listening on: https://localhost:17008

    и браузер автоматически откроет Aspire Dashboard по этому адресу.

📝 Пояснения

  • Dashboard (веб-панель Aspire) — это встроенный UI, показывающий состояние всех ресурсов, логи, трассировку. Он запускается внутри процесса AppHost.

  • Проект AppHost (AspireApp1.AppHost.csproj) — консольное приложение, которое поднимает Dashboard и управляет остальными сервисами.

  • Проекты ApiService и Web не могут самостоятельно запустить Dashboard.

🧹 Что ещё можно проверить (если после смены стартового проекта не заработает)

  • В AppHost.cs полностью удалён закомментированный вызов Dapr – текущий код корректен.

  • В launchSettings.json AppHost должно быть "launchBrowser": true (уже есть).

  • Убедитесь, что Redis не конфликтует портом – используется 6380, это нормально.

  • Dashboard может не открыться, если в системе не хватает сертификатов для HTTPS — тогда временно переключитесь на профиль http в launchSettings AppHost (там порт 15141).
    Для этого в Visual Studio в выпадающем списке рядом с кнопкой запуска выберите http вместо https.

---------------------------------------------------------------------------------------------------------

🟢 Работа с Dapr в PowerShell: что нужно знать

Ваш стартовый набор правильный — dapr init выполняется один раз для подготовки локального окружения. Дальше всё зависит от того, как вы запускаете приложения.

1. Первый запуск: инициализация

powershell
dapr init
  • Устанавливает контейнеры Docker: dapr_redis (state store/pubsub), dapr_zipkin (трассировка), dapr_placement (сервис actor).

  • После этого dapr готов к работе.

Если Docker не нужен, можно использовать облегчённый режим:
dapr init --slim — без контейнеров, только бинарники sidecar.

2. Проверка статуса

powershell
dapr status

Показывает, запущены ли placement, Redis, Zipkin и общее состояние среды.

3. Запуск приложений (без Aspire)

Если вы запускаете приложение вручную:

powershell
dapr run --app-id myapp --app-port 5000 --dapr-http-port 3500 -- dotnet run

Но в вашем Aspire-проекте это не требуется — сайдкары запускаются и останавливаются автоматически через .WithDaprSidecar().

4. Сборка и остановка

  • Остановка сайдкаров вручную (если запускали через dapr run):
    dapr stop <app-id>

  • Остановка всей среды Dapr (удаление контейнеров, если вы инициализировали через dapr init):
    dapr uninstall
    после этого нужно будет снова сделать dapr init, если Dapr ещё нужен.

  • При работе с Aspire достаточно закрыть AppHost (Ctrl+C) — все сайдкары завершатся автоматически.

5. Просмотр логов сайдкара

powershell
dapr logs <app-id>

Удобно, если нужно проверить, как обрабатываются pub/sub или state-запросы.

6. Панель мониторинга (Dashboard)

  • Раньше была dapr dashboard, сейчас рекомендуется использовать Zipkin для трейсинга (он запускается при dapr init). Zipkin доступен по умолчанию на http://localhost:9411.

  • В Aspire вы получаете полную приборную панель, поэтому отдельная Dapr Dashboard не нужна.

7. Ручное тестирование Pub/Sub

Можно публиковать события прямо из консоли, не запуская приложение-отправитель:

powershell
dapr publish --pubsub pubsub --topic forecast-generated --data '{"ForecastCount":5, "AverageTempC":10}'

8. Компоненты (компоненты Dapr)

  • Файлы конфигурации (state store, pubsub, bindings) по умолчанию лежат в %USERPROFILE%\.dapr\components.

  • При использовании Aspire с интеграцией Dapr можно размещать компоненты рядом с проектом, а в AppHost указывать через .WithDaprSidecar("apiservice", dapr => dapr.WithResourcesPath("../components")) — это удобнее.

9. Важный нюанс для вашего проекта

Вы используете CommunityToolkit.Aspire.Hosting.Dapr. Когда раскомментируете builder.AddDapr() и .WithDaprSidecar(), ни в коем случае не запускайте дополнительно dapr run — Aspire сам поднимет и настроит сайдкары для каждого сервиса. Двойной запуск приведёт к конфликтам портов.

10. Чего точно не надо делать каждый раз

  • Повторно выполнять dapr init — только если вы удаляли окружение (dapr uninstall).

  • Вручную поднимать dapr run для проектов, которыми управляет Aspire.

Если всё работает через AppHost — вы на правильном пути. Dapr CLI вам понадобится в основном для dapr status, просмотра логов и отладки.

Комментариев нет:

Отправить комментарий