优秀的编程知识分享平台

网站首页 > 技术文章 正文

在服务中默默地执行C#业务代码(在服务中默默地执行c#业务代码)

nanyue 2024-09-11 05:30:54 技术文章 11 ℃



上期回顾

在上一篇文章《用C#写一个在后台偷偷运行的服务》中,我们用C#完成了一个基础的Windows服务的编写。



加入业务代码

现在我们来讲解如何在服务中运行我们的业务代码:


我们查看MyService1.cs的代码:


其中的OnStart函数,就是执行我们的代码的地方。在这里我们可以实现自己的业务逻辑,比如数据监测,网络通信,后台服务等等。因为OnStart函数,会在用户启动服务的时候执行。

今天我们写一个简单的示例:


我们模拟一个循环,里面通过Sleep来模仿实际的业务代码,同时我们输出一个带计数的日志,来监控服务的运行情况。

其中的Logger是我简单写的一个日志模块,Logger会在服务的exe所在目录,创建指定文件名的日志文件,调用Logger.Log函数,即可完成日志的输出。


运行服务

现在我们编译一下服务,运行看看效果:


打开日志文件:

运行结果如下:

可以看到我们的服务以及正常运行了。日志正常输出。

服务停止业务代码


我们看到,在MyService1.cs中,还有一个自动生成的函数OnStop。这个函数就是处理服务停止的时候的业务代码。

通常我们的服务停止的时候,需要释放服务中的资源,如:

  • 关闭文件
  • 刷入缓存
  • 关闭数据库连接
  • 关闭网络连接
  • 。。。。。。

这些资源释放的操作,就是在OnStop函数中执行的。而且OnStop函数,会在用户停止服务的时候调用。


我们就简单的实现停止服务逻辑:

  • 标记服务结束
  • 等待线程退出
  • 释放日志资源

然后我们停止服务,编译程序,再重新运行服务。这时服务和之前没有差别。

现在我们再次停止服务,然后对比两次服务结束之后的日志输出的差异:



我们不难看出,在我们的OnStop函数中,服务还写了最后一条日志。

如果我们不在OnStop中执行相关的收尾工作,那么我们将丢失最后一次服务执行的数据。如果数据非常重要,这将导致数据丢失,进而造成严重后果。


踩坑记录

外老师在这时遇到一个问题:服务安装失败


最后发现需要以管理员运行VS 2019才能执行服务安装!因为安装服务,需要管理员权限。


下期预告

如何调试服务?

服务如何支持暂停/恢复?

以及其他服务的高级开发秘籍!

敬请期待。。。


下一篇文章《一步一步地调试C#服务》,欢迎检阅!

Tags:

最近发表
标签列表