在.net解决方案中使用多个项目的Hangfire

Zap*_*ica 9 asp.net hangfire

我希望在我的asp.net web api和asp.net MVC网站项目中实现hangfire.

我构建解决方案的方式如下:

解决方案 - 我的解决方案
1:模型 - (包含实体框架对象和类的项目)
2:服务(我实现所有>业务逻辑,更改等的地方)这是我最有可能使用HangFire的地方.

3:Web API(我的asp.net api项目)
4:Web UI(mvc 5 Admin界面网站)

项目3和项目4都利用2:Services项目来完成工作并调用执行业务逻辑的服务.这是大多数任务将被剥离的地方.

我将如何实现hangfire,以便他们各自的iis站点都可以使用hangfire的相同"实例".但它显然会在相关的应用程序池上运行?

或者它可能不能那样工作,我必须让它在一个地方运行?

我有什么选择,还有什么是推荐的方法?

Geo*_*ett 3

对我来说最大的收获是 HangFire 在工作池关闭(即空闲超时)后不会继续,这无论如何都是我的核心问题,并建议更改服务器配置以永远不关闭工作池。如果您的应用程序将持续使用 24/7,那么这对您来说不应该是问题,尽管您的工作池仍可能因各种原因而被回收,但对于会经历用户高峰和低谷的应用程序,那么您可能需要考虑进程外的 HangFire 服务器。

我采取的方法是后者。我正在构建一个概念验证,它有一个 Windows 服务(使用Topshelf构建- 强烈推荐这样做),该服务托管 HangFire 服务器(和仪表板)、共享核心库和客户端(这将是我的 WebAPI)生产,但是是用于 PoC 的 WPF 应用程序)。客户端使用共享库中的类实例将作业排入队列,HangFire 服务器也可以访问该共享库。

根据您的描述,我假设 WebAPI 控制器操作从服务层调用类中的相应方法?如果是这种情况,那么我会选择与我的类似的解决方案,其中 HangFire Windows 服务可以根据需要访问您的服务和模型。

如果您的应用程序流量很大并且工作池回收不会打扰您,那么我会直接在您的 WebAPI 中托管 HangFire 服务器。