C#windows服务+;长时间运行的工作流

C#windows服务+;长时间运行的工作流,c#,windows-services,C#,Windows Services,我正在开始开发一个windows服务,并希望在深入探讨如何最好地处理它之前咨询stackoverflow的braintrust 这将是我的第一个windows服务,我对线程还不是很熟悉,这就是我在这里的建议(但我渴望学习!) 该服务将具有以下高级功能: 监视文件夹中的新文件(计划使用FileSystemWatcher) 一旦检测到文件,它将排队等待上载到外部主机 如果队列中有文件,则以串行HTTP方式将这些文件发布到外部主机。 文件必须一次发布一个(串行),并且必须使用HTTP POST传输

我正在开始开发一个windows服务,并希望在深入探讨如何最好地处理它之前咨询stackoverflow的braintrust

这将是我的第一个windows服务,我对线程还不是很熟悉,这就是我在这里的建议(但我渴望学习!)

该服务将具有以下高级功能:

  • 监视文件夹中的新文件(计划使用FileSystemWatcher)
  • 一旦检测到文件,它将排队等待上载到外部主机
  • 如果队列中有文件,则以串行HTTP方式将这些文件发布到外部主机。
    • 文件必须一次发布一个(串行),并且必须使用HTTP POST传输
  • HTTP POST成功后,它将删除本地文件,如有必要,移动到上载队列中的下一个文件并重复该过程
即使在这样高的级别上,我也能预见到的问题是,将文件发送到外部主机的HTTP POST可能需要很长时间

有哪些设计选项可以最好地处理windows服务的这个长期运行的方面?我是否应该考虑使用windows服务作为此解决方案的实现?我应该改为寻找一个独立的应用程序吗


提前谢谢你们

好吧,如果我理解正确的话,你想要实现的目标并没有那么复杂

我会选择windows服务和FileSystemWatcher

没有多少线程你需要做的。我唯一想做的事情就是上传文件,这很容易用一个线程完成。通过线程化,您可以异步上载多个文件


如果您需要更多帮助,请告诉我。

好吧,如果我理解正确,您想要实现的目标并没有那么复杂

我会选择windows服务和FileSystemWatcher

没有多少线程你需要做的。我唯一想做的事情就是上传文件,这很容易用一个线程完成。通过线程化,您可以异步上载多个文件


如果您需要更多帮助,请告诉我。

在我看来,windows服务不是一个坏主意,尤其是因为您希望它不断运行以检测文件夹中的文件条目。HTTP POST限制非常重要,但您知道它将占用的时间和资源。我认为您最关心的是排队和资源管理。您将希望将这些传输中的每一个旋转到BackgroundWorker进程中,以便可以独立完成多个文件,但是您还希望有一个管理类,可以限制可以旋转的BackgroundWorker对象的数量。否则,您将遇到内存管理问题、网络阻塞以及其他问题

您应该考虑文件夹中出现文件的最坏/最佳情况。可以同时显示的最大文件数是多少,文件的最大大小是多少,当文件夹开始“备份”时会发生什么,因为HTTP POST没有足够快地将它们传递到目标。当无法访问目标主机时会发生什么情况?当系统重新启动“中间交付”时会发生什么?是否有确定文件传递优先级的来源?是否存在文件传递必须中断或事务性反转的情况


我认为Windows服务与FileSystemWatcher相结合是正确的选择。请注意您的资源使用情况。

在我看来,windows服务不是一个坏主意,尤其是因为您希望它不断运行以检测文件夹中的文件条目。HTTP POST限制非常重要,但您知道它将占用的时间和资源。我认为您最关心的是排队和资源管理。您将希望将这些传输中的每一个旋转到BackgroundWorker进程中,以便可以独立完成多个文件,但是您还希望有一个管理类,可以限制可以旋转的BackgroundWorker对象的数量。否则,您将遇到内存管理问题、网络阻塞以及其他问题

您应该考虑文件夹中出现文件的最坏/最佳情况。可以同时显示的最大文件数是多少,文件的最大大小是多少,当文件夹开始“备份”时会发生什么,因为HTTP POST没有足够快地将它们传递到目标。当无法访问目标主机时会发生什么情况?当系统重新启动“中间交付”时会发生什么?是否有确定文件传递优先级的来源?是否存在文件传递必须中断或事务性反转的情况


我认为Windows服务与FileSystemWatcher相结合是正确的选择。请注意您的资源使用情况。

Windows服务是最佳选择

我没有预见到任何问题,因为我以前做过几乎完全相同的事情,除了我连接到一个DB而不是http服务,并且没有任何问题

您不需要多线程,尤其是因为您一次发布一个文件


如果您有一个应用程序来监控您的服务,并在服务宕机时向您发送电子邮件/短信,这将非常有用。

Windows服务是一个不错的选择

我没有预见到任何问题,因为我以前做过几乎完全相同的事情,除了我连接到一个DB而不是http服务,并且没有任何问题

您不需要多线程,尤其是因为您一次发布一个文件


如果您有一个应用程序来监控您的服务,并在服务宕机时向您发送电子邮件/短信,这将非常有用。

Windows服务肯定是一个不错的选择。在启动服务的方法中,您必须创建必要的