Wep Api或WCF运行预定的长期运行任务

时间:2018-04-14 18:28:42

标签: c# .net wcf asp.net-web-api windows-services

我正在开发客户端/服务器应用程序(C#,用于GUI的Winforms)。 我们有一个模块来执行将数据从数据库导入/导出到其他外部源的任务。用户使用任何客户端站管理活动。下一步将允许计划自动执行任务(例如,X开始时间和每小时重复,每天或每周或每月时间,等等)。 每个任务都允许使用任何数据源(excel。访问或dbms)导入或导出大量数据,因此它们是长期运行的活动。

现在,实现此逻辑的DLL被分发到每个客户端站点。这不是一个好的解决方案,因为我们必须在每个客户端安装所有潜在需求(例如,所有托管dbms的驱动程序ado / oledb / odbc)。

我必须将此逻辑移至服务器站。在每个客户端中,我希望看到任务进度,停止或启动任何任务,或更改计划表并重新启动该过程。

我正在考虑什么是最好的解决方案。实现 Web API或WCF 。可能是WCF,因为面向服务,但是我已经看到了带有Web API的项目或文章,以及Quartz或Hangfire等库。 我还在考虑是否更好地使用 Windows服务并在其中托管WCF。

什么是最佳解决方案?还是有其他解决方案我不考虑? 谢谢

修改 从任何客户端工作站,用户可以根据应用的设置(频率时间,每天/每周/每月重复)安排所有要执行的任务。可能我应该使用Windows服务,因为当服务器机器自动打开时,必须自动启动此服务并检查是否有任务要运行。同时,用户可以决定手动运行任何任务而无需安排它,在这种情况下,它将在轮到他时排队并处理。 现在,我正在考虑将WCF服务托管到服务器计算机中的Windows服务中。我将自动启动后台工作程序以检查要运行的计划任务。此外,所有客户端都可以调用方法来启动一个或多个任务。要通知所有客户的进度,我将使用合同双面打印。

2 个答案:

答案 0 :(得分:1)

您需要根据您的要求在WCF和Web API以及Choosing which technology to use之间进行比较。

如果您只需要HTTP作为传输协议,而轻量级Web托管服务则需要使用Web API。

我会推荐Hangfire,因为它具有许多功能,而不是像分布式,持久性等Windows服务,而且,它是开箱即用的仪表板,可以显示所有预定,处理,成功和失败的作业。

还查看本文 Runing Background Tasks in ASP.NET

答案 1 :(得分:0)

如果这是一个内部应用程序而客户端正在使用winforms,那么您可以在后台获取/发布到web api端点 - 这样用户无需安装数据库驱动程序即可检索/导出数据

web api驱动的imo,对Windows服务不太熟悉,但我看到的一个好处是该服务仍然可以在重启时运行

随时直接与我联系