C#.NET新手帮助...最佳实践

时间:2009-09-13 00:08:53

标签: c# web-applications service console

我需要一些如何执行我需要执行的特定任务的指导...

我有一个数据库表,其中包含用户对Excel电子表格发出的请求。

在该表中有一个状态列,指示请求所在的步骤。

我需要编写一种能够继续检查该表的状态列的服务。

当找到包含其正在查找的状态的记录时,它应该从记录中提取数据并调用另一个创建excel电子表格的应用程序。

(注意:我编写了一个程序,其中包含一个创建excel电子表格并将其保存到本地硬盘的类。所有这些都将托管在同一台服务器上)

提前致谢!

5 个答案:

答案 0 :(得分:2)

您需要查看创建Windows服务或运行您的检查代码的进程,将其设置为计划任务。

我优先考虑Windows服务,因为它们已经安装,始终在启动时启动并在一致的环境中运行。计划任务取决于未触摸的任务以及未移动的可执行文件。

Windows服务/预定任务的主要部分将是计时器。可能每隔五分钟就会根据您需要的频率,或多或少地检查数据库表。

Here是一个很好的入门资源。

答案 1 :(得分:0)

如果我是你,我会采取双重方法。

我会将所有业务'逻辑'放入C#库(比如widget.core.dll)。

然后,在您的服务应用程序中,只需要最低限度的启动和停止服务(即不超过VS生成的标准样板),并直接调用您的core.dll。

还要编写一个控制台应用程序,如果需要,它需要一些输入参数,并且这个调用与您的core.dll中的服务完全相同。同样,这个控制台应用程序应该只有足够的代码来处理参数并适当地调用核心库。然后可以手动调用此控制台应用程序,也可以将其作为计划任务调用。

通过从服务或控制台的实现中拆分核心库,您将使测试应用程序变得更加容易,因为所有的acutaly进程逻辑都应该在core.dll中并且可以从单元测试中调用,测试代码或控制台应用。

只需很少的额外开销,您就可以灵活地将应用程序用作服务或计划任务(取决于他们的偏好,环境等)。

service.exe --
             |
             --> core.dll
             |
console.exe--

答案 2 :(得分:0)

参考你的帖子:

你可以做几件事:

  1. 你可以做你的建议,有一个程序(一个Windows服务听起来合适)周期性地查询你的表(听起来像一个select * from tableName where field = something)然后a:只调用必需的您的应用中的方法,在此计划中称为dll。

  2. 在您已编写的程序/ exe中包含对表格的检查,并通过Windows预定任务界面进行计划。

  3. 编辑>我认为2可能是最好的。编写一个Windows服务对于这个来说太过分了,这取决于检查发生的频率,编写所有代码来创建/管理/重启/不是什么样的Windows服务,虽然是教育,但是浪费了精力。

答案 3 :(得分:0)

在评论中回答您的其他问题:

“我如何调用实际创建电子表格的应用程序?”

我会在core.dll中包含创建电子表格的'应用程序'(除非你有充分的理由,我认为库越少越好,因为跟踪的事情就越少)。

您希望在服务或命令行应用程序的DLL中使用一些公共方法。

很可能是一个调用服务可以使用的System.Threading.Timer()对象的方法。一种创建电子表格的方法。

答案 4 :(得分:-1)

如果我理解你的问题,那么你需要编写一个循环来定期检查相关请求的状态列值。在伪代码中:

while (true)
     for request r in requests
           <check status column for r, take action as necessary>
     end for
     sleep (some interval)
end while