我希望在我的asp.net web api和asp.net MVC网站项目中实现hangfire。
我构建解决方案的方式如下:
解决方案 - 我的解决方案
1:模型 - (包含实体框架对象和类的项目)
2:服务(我实施所有>业务逻辑,更改等)。这是我最有可能使用HangFire的地方。3:Web API(我的asp.net api项目)
4:Web UI(mvc 5管理界面网站)
项目3和项目4都使用2:Services
项目来完成工作并调用执行业务逻辑的服务。这是大多数任务将被剥离的地方。
我将如何实施hangfire,以便他们各自的iis网站都可以使用hangfire的相同“实例”。但它显然会在相关的应用程序池上运行吗?
或者它可能不能那样工作,我必须让它在一个地方运行?
我有什么选择,还有什么是推荐方法?
答案 0 :(得分:2)
对我来说最大的收获是HangFire不会继续关闭工作池(即空闲超时),这无论如何都是我的核心问题,并建议更改服务器配置以永不关闭工作池。如果您的应用程序将全天候使用,那么这对您来说不是问题,尽管您的工作池仍然可以出于各种原因进行回收,但对于会遇到用户高峰和低谷的应用程序那么你可能想要考虑一个进程外的HangFire服务器。
我采取的方法是后者。我正在构建一个概念验证,其中包含一个Windows服务(使用Topshelf构建 - 强烈建议使用它),它承载HangFire服务器(和仪表板),共享核心库和客户端(这将是我的生产中的WebAPI,但它是PoC的WPF应用程序。客户端使用共享库中的类实例将作业排入队列,HangFire服务器也可以访问该类。
我从您的描述中假设WebAPI控制器操作从服务层调用类中的相应方法?如果是这种情况,那么我会选择与我的类似解决方案,HangFire Windows服务可以根据需要访问您的服务和模型。
如果您的应用程序将被大量投放并且工作池回收不会让您感到烦恼,那么我将直接在您的WebAPI中托管HangFire服务器。