【问题标题】:Status of windows service, WCF vs writing status in database every x seconds/minutesWindows 服务的状态,WCF 与数据库中每 x 秒/分钟的写入状态
【发布时间】:2015-12-22 20:00:06
【问题描述】:

在我的工作中,我们有一些旧的“服务”实际上是 Console 应用程序,它们在我们的服务器上运行 24/7。最后我们决定将其替换为Windows Services,但是现在我们可以从每个控制台窗口中看到出现错误或某些事件(如请求过多等)时。

现在的想法是让每个 Windows 服务每分钟写入一个数据库(这样我们可以查看服务是否没有停止),并且在发生某些事件时(例如许多请求)也写入数据库。

现在我一直在考虑在每个 Windows 服务中托管一个 WCF Service,因为我认为有更多的可能性(而且我不太喜欢我们的数据库每个都从 10 多个服务中插入数据的想法分钟)并且仍然可以编写一个应用程序,每隔 x 时间向WCF 服务发送请求。

WCF 与在数据库中写入的方法相比有什么缺点吗?当然,在数据库中,在数据被读取之前保留数据更容易,但这只是我能想到的一个(小)问题。

提前致谢!

【问题讨论】:

    标签: c# .net wcf windows-services


    【解决方案1】:

    我会选择以下选项:

    1. 按照您的建议,创建 WCF 端点并验证您的服务是否已开启。您仍然需要实施错误升级。我喜欢用ELMAH

    2. 使用看门狗How can I verify if a Windows Service is running

    对于事件,使用 log4net 或 Nlog 等记录器记录服务活动。然后将其附加到 DB/Email/File。我最喜欢的是使用 ELK (Elastic/Logstash/Kibana) 或 Splunk 来管理日志。

    【讨论】:

    • 是的,我们已经将 log4net 与 RollingFileAppender/DbAppender 一起使用,但我不太喜欢服务不断写入数据库的想法。对于某些事件,我猜会很好
    • 我明白你在说什么。如果事件是调试/信息/错误日志,那么使用 log4net 和您想要的任何附加程序都非常好。如果日志是业务逻辑事件,例如流程上的里程碑等。这应该是您的数据模型的一部分,因此可以与您的模型一起保存在数据库中。
    • 我没听懂你的最后一句话,数据模型的事件部分?
    • “错误或某些事件” - 如果某些事件是您的业务流程的一部分,它们应该与您的应用程序模型一起保留。即,您正在编写一个 stackoverflow 网站,并且用户已投票 V 作为答案,这是一个业务应用程序事件,应与用户和数据库中的所有其他信息一起保存。
    • 哦,好吧,我的情况不是这样。在查看了ServiceController 类之后,我肯定会将其用于我的服务状态,并坚持使用 log4net 来获取事件。非常感谢,这个网站永远不会让我失望 :)
    猜你喜欢
    • 1970-01-01
    • 2012-11-08
    • 2017-10-15
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    • 2020-02-29
    • 2011-02-05
    相关资源
    最近更新 更多