我可以在ASP.NET Core Web Host中运行托管服务吗? 获取System.ObjectDisposedException

问题描述

我有一个运行ASP.net Core Web Host的ASP.net Core Web API。 在ServiceCollection中,我注册了HostedService来运行订阅消息总线的工作程序。

某些消息来自Web API。一些消息通过工作程序来自消息总线。 它们都被写入数据库

目前,我在将来自工作线程的消息写入数据库时​​遇到了问题,我在依赖项注入的数据访问范围服务上得到了System.ObjectdisposedException。

感觉我的工作人员正在某种程度上将HTTP请求范围用于DI注入的服务。

所以,这可能是由于在ASP.NET Core Web Host中使用Hosted Service造成的吗?

解决方法

请勿在ServiceHosted中读取消息,您应该单独阅读(也许在单例情况下)

如果您正在手动从服务总线中读取消息,则应该不会出现该问题,否则就不应该使用作用域服务。例如,在RabbitMQ中,最佳做法是为每个应用打开连接