C# 客户端应用程序vs Windows服务vs?

C# 客户端应用程序vs Windows服务vs?,c#,wpf,winforms,service,architecture,C#,Wpf,Winforms,Service,Architecture,我目前正在为我们组织的一组应用程序研究一些重新架构。目前,我们有一套10-15多个独立应用程序,它们相互通信,并在客户端软件和硬件之间提供一个中间级别 当前模型的问题是大量的单个应用程序,这会增加内存开销、通信延迟、系统膨胀,并且在这些应用程序崩溃时难以从问题中恢复 我正在考虑将应用程序合并为1-2个逻辑单元,以帮助解决其中一些问题。困境在于如何做好这一点: Windows服务 用户界面应用程序 两者都有 我们的目标是拥有一个能够处理所有客户端硬件通信的常开系统,同时还拥有一个丰富的管理员用

我目前正在为我们组织的一组应用程序研究一些重新架构。目前,我们有一套10-15多个独立应用程序,它们相互通信,并在客户端软件和硬件之间提供一个中间级别

当前模型的问题是大量的单个应用程序,这会增加内存开销、通信延迟、系统膨胀,并且在这些应用程序崩溃时难以从问题中恢复

我正在考虑将应用程序合并为1-2个逻辑单元,以帮助解决其中一些问题。困境在于如何做好这一点:

  • Windows服务
  • 用户界面应用程序
  • 两者都有
我们的目标是拥有一个能够处理所有客户端硬件通信的常开系统,同时还拥有一个丰富的管理员用户配置UI,该UI能够与该系统的所有单独组件进行通信,并提供配置/等功能。拥有WinForms/WPF应用程序将允许管理员用户轻松访问系统配置,并提供实时反馈(摄像头馈送等),但会让管理员在意外关闭窗口时打开此窗口。让一个服务完成所有这些工作是很好的,但我不确定如何提供一个丰富的管理用户界面来交互和更改此服务

有什么想法或链接值得一读吗


谢谢

我只是想为其他可能有类似问题的人更新我自己的问题

我使用的是一个集中式Windows服务,它为它的许多子组件公开了许多WCF端点。最上面是一个UI应用程序,它通过WCF端点与Windows服务通信。为了简化生成和调试,Windows服务配置为在调试中运行时作为控制台应用程序运行


到目前为止,这个解决方案似乎效果很好

这可能不是回答这个问题的合适地方。请尝试此处:是什么阻止您同时拥有客户端应用程序和Windows服务,甚至是系统托盘应用程序?您的做法是正确的,如果您需要一个始终在线的服务来监控硬件通信,您将需要一个Windows服务。然后,您可以使用一个WPF应用程序作为UI,它可以与您的服务对话,或者与共享的本地数据库对话。您可以使用RPC从WPF应用程序与Windows服务对话,或者更好的方法是使用SQL数据库。因此,您的服务可以将数据写入数据库,您的UI可以读取数据。另一个选择是让UI通过TCP套接字连接到您的服务,并以这种方式发送/接收消息。我们有一个通过WCF与windows服务通信的MVC应用程序。您有很多选择。@roryap在引用其他站点时,指出这一点通常会有所帮助