【问题标题】:Should I build a Windows Service in order to run my C# code on a schedule?我应该构建一个 Windows 服务以便按计划运行我的 C# 代码吗?
【发布时间】:2009-12-15 18:41:02
【问题描述】:

我编写了一个控制台应用程序,该应用程序将 MS 报告发送到电子邮件..(原因是我可以轻松检查它是否有效) 我希望它每天早上 6 点运行。

我的想法是编写一个服务(所以没有人需要登录并且服务将运行)。 所以我想直接在 WebService 中调用静态方法。

我有一个带有 1 个项目文件的解决方案,它是我的控制台应用程序(带有设置、许多参考……等)。我想添加另一个项目 - Windows 服务。 我的问题是..如何轻松地做到这一点,所以我不必将所有类等复制到 Windows 服务项目?

还是我完全偏离了方向? :)

谢谢!

【问题讨论】:

  • 您使用的是 SQL Server 吗? SQL Reporting Services 内置了此功能。
  • 是的,我是……但它要复杂得多……我无法使用内置功能……我也将其发送到 MS SharePoint……发送到 WebService 等……
  • 我有一个自定义的决定逻辑 .. 发送什么、发送方式和时间
  • Reporting Services 也有数据驱动订阅,可以有条件地发布到不同的地方,例如文件共享、Sharepoint、电子邮件等。
  • 该死的..看来我的工作没用.. :-/

标签: c# windows service project


【解决方案1】:

使用 Windows 服务每天发送一封电子邮件听起来有点矫枉过正。为什么不在任务计划程序中安排任务?

【讨论】:

  • 任务计划程序会在任何人登录之前运行吗?还是在后台?它究竟是如何工作的?谢谢
  • 是的,它在“任务计划程序”服务下运行
  • 您只需要提供正确的身份验证设置,任务就会运行。
  • 只要机器启动,任务调度程序就可以在没有用户登录的情况下运行作业。本机 Windows 任务调度程序不会进行任务恢复,它只是一个简单的“在 Y 时间运行 X”调度程序
  • 而且你不需要一个新项目来做它。您可以在 schtasks 下运行控制台 EXE。简单。
【解决方案2】:

您将不得不重构您的应用程序。我推荐三个项目 -

控制台应用程序 - 在您的业务逻辑对象上实例化并执行任何必要的设置,然后将所有输出路由到控制台。使用它进行调试和测试

业务逻辑 - 将应用程序的所有逻辑提取到此类中。

服务 - 基本上与控制台应用程序相同,但我建议将任何错误发送到全局事件记录器。这样一来,如果您的服务爆炸,您就可以找出原因。

您可以将此模式用于您开发的任何其他服务。

【讨论】:

    【解决方案3】:

    创建一个类库并将共享类放入该库中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-10
      • 2016-09-19
      • 1970-01-01
      • 2016-11-12
      • 1970-01-01
      • 1970-01-01
      • 2019-12-02
      • 2012-10-29
      相关资源
      最近更新 更多