Windows Service Plus GUI/C#

Windows Service Plus GUI/C#,c#,windows-services,C#,Windows Services,我见过一些作为windows服务运行的应用程序,但仍然可以提供GUI,允许用户查看实际情况 例如,我们有一个构建报告的windows服务。管理员希望看到许多统计数据,例如排队的报告数量、使用的ram数量、平均构建时间等 我们想做的是为管理员提供一种查看此信息的方法-例如,可以连接到窗口服务以收集和显示此信息的应用程序。。。或者应用程序本身可以提供自己的GUI并在请求时显示。现在,应用程序唯一要做的就是创建一个日志文件 有什么方法可以做到这一点吗?理想情况下,服务与用户界面完全分离,原因有很多,我

我见过一些作为windows服务运行的应用程序,但仍然可以提供GUI,允许用户查看实际情况

例如,我们有一个构建报告的windows服务。管理员希望看到许多统计数据,例如排队的报告数量、使用的ram数量、平均构建时间等

我们想做的是为管理员提供一种查看此信息的方法-例如,可以连接到窗口服务以收集和显示此信息的应用程序。。。或者应用程序本身可以提供自己的GUI并在请求时显示。现在,应用程序唯一要做的就是创建一个日志文件


有什么方法可以做到这一点吗?

理想情况下,服务与用户界面完全分离,原因有很多,我不想谈

但是,您可以使用IPC的某种方式查看此类信息。我的建议是使用远程处理从服务请求所需的数据,然后根据需要将任何报告或图形构建到单独的应用程序中。

  • 拥有某种组件,可以挂接到windows服务中,并通过远程处理将信息发送到另一个应用程序。如果你有一个IoC容器,聪明地使用装饰器可以做到这一点
  • 使用服务总线、MSMQ、WCF、咆哮或类似的方式来广播有趣的信息。应用程序只需要知道如何连接
  • 公开HTTP端点或某人可以连接到windows服务并在其中下载信息的内容
  • 或者简单地创建一个单页WinForms应用程序,每隔一段时间读取日志文件并显示有趣的结果

  • (请注意,最后一个是目前为止最简单的-提示,请这样做。)

    服务不允许进行UI API调用(一种特定形式的消息框除外)。因此,看起来有wser接口的服务实际上是两个进程。服务进程正在使用某种专有的反向通道与标准Windows应用程序通信。可以是命名管道、套接字或大量命名共享内存。

    我建议使用WCF而不是远程处理。从设计的角度来看,远程处理是紧密耦合的,可能会导致版本控制问题(而且限制对WCF服务的访问比远程处理端点容易得多);从技术的角度来看,远程处理是一项垂死的技术,被WCF所取代。谢谢-我设置了远程处理。结果比选项4简单得多。。。解析文本文件很糟糕:)