【发布时间】:2016-10-27 20:43:47
【问题描述】:
我有一个名为 AppCore 的类库 DLL,它存储所有与数据库相关的访问并包含所有应用程序逻辑。
此库由 ASP.Net (MVC5) 应用程序使用,该应用程序将该库用于所有 DB 访问(通过公开的方法)和特定于应用程序的逻辑(实体框架或 DBContext 未公开在 DLL 之外)。
AppCore 有一些方法可能需要几分钟才能运行。这些方法需要从 ASP.Net 应用程序中调用。
我想我们都知道 ASP.Net 中长时间运行的调用都是:“不,不要这样做,这会很糟糕,你以后会因为这样做而诅咒”。
因此,我正在研究由 Scott Hanselman 等人推荐的 Hangfire.io,用于长时间运行 ASP.Net 调用。
现在我的问题是,是否有人知道如何在类库 DLL 中实现 Hangfire,而该类库 DLL 又会被 ASP.Net 应用程序使用。 AppCore.dll 中包含 DbContext,并且它具有长时间运行的方法。但是调用将来自 ASP.Net,它对数据库或长期运行的代码逻辑没有直接的了解。
编辑:我能想到的最好方法是在 ASP.Net 应用程序中安装 Hangfire,并为此设置一个单独的 DBContext。但是,我更愿意将它全部放在 AppCore DLL 中,而不是散布逻辑。
【问题讨论】:
-
您似乎走在了正确的轨道上。Hangfire 非常适合从 ASP.net 脱机任务。但是,我不确定我是否理解您担心的原因。您声明 appcore.dll 拥有它自己的依赖项,例如 dbcontext 等,但是您建议在 ASP.net 代码中创建一个 dbcontext。这是因为您需要在某处注入 dbcontext 吗?
-
好吧,我假设 Hangfire 需要我在 ASP.Net 站点的 Startup.Configuration 中运行东西(如操作指南中所述)。但由于 ASP.Net 不了解数据库,这变得很棘手。目前正在考虑为 Hangfire 创建一个单独的前端数据库,而不是“污染”核心数据库。
-
如果我只是在单独的 DLL 中使用 hangfire,并且在 ASP.Net 站点的启动中什么都不做,它仍然是持久的吗?'
-
看我的回答 - 我认为你误解了hangfire的工作原理......