Могу ли я запустить размещенную службу на ASP.NET Основной веб-хост? (получение System.Исключение ObjectDisposedException )

#asp.net-core #.net-core-2.2

#asp.net-core #.net-core-2.2

Вопрос:

У меня есть ASP.net Основной веб-API, выполняющий ASP.net Основной веб-хост. В ServiceCollection я регистрирую HostedService для запуска worker, который подписывается на шину сообщений.

Некоторые сообщения приходят из веб-API. Некоторые сообщения поступают из шины сообщений через worker. Все они записываются в базу данных.

В настоящее время у меня возникают проблемы, когда, когда я записываю сообщения, поступающие от работника, в базу данных, я получаю System.Исключение ObjectDisposedException в моей зависимости, введенной службой с ограниченной областью доступа к данным.

Такое ощущение, что мой работник каким-то образом использует области HTTP-запросов для служб, введенных DI.

Итак, может ли это быть вызвано использованием Размещенного сервиса в ASP.NET Основной Веб-хост

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

1. Покажите какой-нибудь код — мы понятия не имеем, что вы сделали, чтобы перевести его в такое состояние. И, конечно, вы можете запустить IHostedService . Это часть фреймворка, а не веб-хостинга.

2. Не могли бы вы, пожалуйста, опубликовать коды вашей рабочей службы и коды службы, ограниченной доступом к данным?

Ответ №1:

Не читайте сообщения в ServiceHosted, вам следует читать их отдельно (возможно, в одноэлементном сценарии)

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