[英]C# .NET Newbie Help…Best Practices
我需要一些如何执行我需要执行的特定任务的指导...
我有一个数据库表,其中包含用户对excel电子表格的请求。
该表中有一个状态栏,指示请求所处的步骤。
我需要编写某种服务,以便能够继续检查该表的状态列。
当它找到包含所要查找状态的记录时,应从记录中提取数据并调用另一个创建excel电子表格的应用程序。
(注意:我编写了一个程序,其中包含一个类,该类创建excel电子表格并将其保存到本地硬盘中。所有这些都将托管在同一服务器上)
提前致谢!
您将要考虑创建Windows服务或运行作为计划任务设置的检查代码的进程。
我优先使用Windows服务,因为它们已安装,始终在启动时启动并在一致的环境中运行。 计划的任务取决于未触摸的任务以及可执行文件未移动。
Windows服务/计划任务的主要部分将是计时器。 您可能需要每五分钟检查一次数据库表,或多或少地根据您需要的频率检查时间。
这是一个不错的入门资源。
如果我是你,我会采取双重手段。
我会将所有业务“逻辑”放入C#库中(例如widget.core.dll)。
然后,在您的服务应用程序中,仅具有启动和停止服务的最低要求(即,不超过VS生成的标准样板),并直接调用您的core.dll。
还要编写一个控制台应用程序,如果需要,该应用程序会使用一些输入参数,并使该调用与您的core.dll中的方法完全相同。 同样,此控制台应用程序应仅具有几乎没有足够的代码来处理参数并适当地调用核心库。 然后可以手动或作为计划任务调用此控制台应用程序。
通过从服务或控制台的实现中拆分核心库,您将使测试应用程序变得容易得多,因为所有的实际流程逻辑都应位于core.dll中,并且可以从单元测试,测试代码或控制台应用程序中调用。
您只需很少的额外开销,即可为用户提供将应用程序既可以用作服务又可以用作预定任务的灵活性(取决于他们的喜好,环境等)。
service.exe --
|
--> core.dll
|
console.exe--
参考您的帖子:
您可以做几件事:
您可以按照您的建议进行操作,有一个程序(一个Windows服务听起来很合适),该程序会定期查询您的表(听起来像select * from tableName,其中field = something),然后执行以下操作之一:只需从您的应用中调用所引用的必要方法作为该程序中的dll。
在您已经编写的程序/ exe中包括对表的检查,然后通过Windows计划任务界面对其进行计划。
编辑>我认为2可能是最好的。 为此,根据检查的频率来编写Windows服务实在是过头了,尽管编写所有代码来创建/管理/重新启动/不是Windows服务(尽管很有教育意义),却浪费了很多精力。
为了回应您在评论中的其他问题:
“我将如何调用实际创建电子表格的应用程序?”
我将在core.dll中包含用于创建电子表格的“应用程序”(除非您有充分的理由,我认为库越少越好-因为要跟踪的东西更少)。
您将需要在服务或命令行应用程序将使用的DLL中包含一些公共方法。
最有可能是一种方法,用于调用服务可以使用的System.Threading.Timer()对象。 创建电子表格的方法。
如果我理解您的问题,那么您需要编写一个循环,以定期检查相关请求的状态列值。 用伪代码:
while (true)
for request r in requests
<check status column for r, take action as necessary>
end for
sleep (some interval)
end while
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.