【发布时间】:2018-09-24 20:44:07
【问题描述】:
我正在开发一个客户端/服务器应用程序(C#,用于 GUI 的 Winforms)。 我们有一个模块来执行将数据从数据库导入/导出到其他外部源的任务。活动由使用任何客户端站的用户管理。下一步将是允许计划自动执行任务(例如,X 开始时间和每小时重复一次、每天或每周或每月时间等)。 每个任务都允许使用任何数据源(excel.access 或 dbms)导入或导出大量数据,因此它们是长期运行的活动。
现在实现此逻辑的 DLL 已分发到每个客户端站。这不是一个好的解决方案,因为我们必须在每个客户端中安装所有潜在需求(例如驱动程序 ado / oledb / odbc 用于所有托管 dbms)。
我必须将此逻辑移至服务器站。在每个客户端中,我想查看任务进度、停止或启动任何任务,或者更改调度表并重新启动进程。
我正在考虑什么是最好的解决方案。实现 Web API 或 WCF。可能是 WCF,因为它是面向服务的,但我见过将 Web API 与 Quartz 或 Hangfire 等库结合使用的项目或文章。 我也在考虑使用 Windows 服务 并在其中托管 WCF 是否更好。
什么是最好的解决方案?还是我没有考虑其他任何解决方案? 谢谢
编辑: 从任何客户端工作站,用户可以根据应用的设置(频率时间,每天/每周/每月重复)安排所有要执行的任务。可能我应该使用windows服务,因为当服务器机器自动打开时,这个服务必须自动启动并检查是否有任务要运行。同时,用户可以决定手动运行任何任务而不进行调度,在这种情况下,轮到他时将排队并处理。 现在我正在考虑将 WCF 服务托管到服务器机器中的 Windows 服务中。我将自动启动一个后台工作人员来检查要运行的计划任务。此外,所有客户端都可以调用一种方法来启动一个或多个任务。为了向所有客户通知进度,我将使用 Contract Duplex。
【问题讨论】:
-
你能发布你系统的拓扑吗?根据你的描述,很难看到。简而言之,Web API 和 WCF 是通信框架。如果您需要长时间运行的服务,则需要 Windows 服务。需要很长时间才能完成的任务与始终运行并等待工作的服务之间存在差异。您可以让 Windows 服务 24/7 在您的机器上运行,它可以非常快速地完成任务,并且您可以让 Web API 请求需要很长时间才能完成,因为工作需要很长时间才能完成。
-
我在正文中添加了其他信息。正如我在上面所写的,我的疑问是了解使用 WCF 开发所有内容还是通过制作 Web API 是否更好。如果我选择 Web API,我应该始终使用 Windows 服务托管还是使用 IIS?如果我使用网络服务器,我将遇到问题,即如何在不发出请求的情况下启动后台进程,但只要网络服务器启动。
标签: c# .net wcf asp.net-web-api windows-services