在监视器应用程序中显示.net服务的输出

本文关键字:服务 输出 net 显示 监视器 应用程序 | 更新日期: 2023-09-27 18:09:58

我有几个正在运行的。net服务进程,现在我想写一个监控应用程序,让用户可以看到所有的服务和它们当前正在做什么。

服务将其输出写入日志文件/事件日志。监视器应用程序应该显示服务(这很容易),然后用户可以选择一个服务并查看该服务正在做什么。我的想法是轮询日志文件(或在其上设置一个FileSystemWatcher)并一直重新加载日志文件。

有更好的方法吗?

是否可以连接到服务进程和服务进程引发事件(与logtext)到监视器应用程序进程(在Win32中我很久以前这样做了,但我不知道如何在。net中做到这一点)?

还是写入共享内存?

或者是否可以通过c# ServiceController传递消息?

在监视器应用程序中显示.net服务的输出

理想情况下,您的服务可以将其消息写入任何类型的记录器接口。我们称它为IServiceLogger它提供了类似于Log(string message)的方法。想象你的服务有一个实现这个接口的记录器列表,并向每个记录器写入内容。

有了这个,您可以插入该接口的任何实现来从服务检索日志。因此,这可能是一个ServiceFileLogger实现写入文件系统,以及NetworkLogger发送这些日志消息到所有连接的客户端。

关于NetworkLogger,您仍然需要做一些工作来处理监控客户端和服务器之间的连接(接收日志并将其发送给客户端的过程),但是您可以构建真正智能的监控工具并将其部署在公司网络中,甚至可以构建一个显示实时日志的网站。

提示:如果你想要一个更标准化的解决方案,我强烈建议你看看log4net,它基本上在内部做同样的事情,但是在上面有一组巨大的功能。使用log4net,您可以使用(或创建)一堆不同的日志appender来接收这些消息,并可以进一步处理它们,如写电子邮件,插入数据库,写入文件等。因此,我认为您可以找到一个匹配的appender,或者为您的监控客户端创建自己的appender。

要实现这一点,您可以使用Windows通信基础。您可以在服务中公开事件,并且监视器可以绑定到该事件。

这个方法取决于实现,但是您可以在这里了解WCF: https://msdn.microsoft.com/en-us/library/ms734712(v=vs.110).aspx