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 некому запустить.
✅ Решение
Сделайте проект
AspireApp1.AppHostстартовым:В Solution Explorer правый клик на
AspireApp1.AppHost→ Set as Startup Project.Убедитесь, что файл
AppHost.csоткрыт или в списке проектов выделен AppHost.
Запустите решение (F5 или Ctrl+F5).
Теперь в консоли вы увидите: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.jsonAppHost должно быть"launchBrowser": true(уже есть).Убедитесь, что Redis не конфликтует портом – используется 6380, это нормально.
Dashboard может не открыться, если в системе не хватает сертификатов для HTTPS — тогда временно переключитесь на профиль
httpв launchSettings AppHost (там порт 15141).
Для этого в Visual Studio в выпадающем списке рядом с кнопкой запуска выберите http вместо https.
🟢 Работа с Dapr в PowerShell: что нужно знать
Ваш стартовый набор правильный — dapr init выполняется один раз для подготовки локального окружения. Дальше всё зависит от того, как вы запускаете приложения.
1. Первый запуск: инициализация
dapr initУстанавливает контейнеры Docker:
dapr_redis(state store/pubsub),dapr_zipkin(трассировка),dapr_placement(сервис actor).После этого
daprготов к работе.
Если Docker не нужен, можно использовать облегчённый режим:dapr init --slim — без контейнеров, только бинарники sidecar.
2. Проверка статуса
dapr statusПоказывает, запущены ли placement, Redis, Zipkin и общее состояние среды.
3. Запуск приложений (без Aspire)
Если вы запускаете приложение вручную:
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. Просмотр логов сайдкара
dapr logs <app-id>Удобно, если нужно проверить, как обрабатываются pub/sub или state-запросы.
6. Панель мониторинга (Dashboard)
Раньше была
dapr dashboard, сейчас рекомендуется использовать Zipkin для трейсинга (он запускается приdapr init). Zipkin доступен по умолчанию наhttp://localhost:9411.В Aspire вы получаете полную приборную панель, поэтому отдельная Dapr Dashboard не нужна.
7. Ручное тестирование Pub/Sub
Можно публиковать события прямо из консоли, не запуская приложение-отправитель:
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, просмотра логов и отладки.