我正在开始Windows服务的开发,并希望在对Stackoverflow进行深入了解之前,先咨询一下Braintrust,以了解处理它的最佳方法。
这将是我的第一个Windows服务,而我对线程并不是很熟悉,我假设这是这里的建议(但很想学习!)。
该服务将具有以下高级功能:
监视文件夹中的新文件(计划使用FileSystemWatcher)。
检测到文件后,该文件将排队上载到外部主机。
如果队列中有文件,则将这些文件串行HTTP POST到外部主机。
必须一次(串行)一次对这些文件进行POST,并且必须使用HTTP POST进行传输。
成功执行HTTP POST后,它将删除本地文件,并在必要时移至上载队列中的下一个文件并重复该过程。
即使在如此高的水平下,我也可以预见的问题是,文件到外部主机的HTTP POST可能会花费很长时间。
有哪些设计选项可以最好地处理Windows服务的这一长期运行的方面?我是否应该甚至完全将Windows服务用作该解决方案的实现?我应该改用一个独立的应用程序吗?
在此先感谢overflow'ers!
最佳答案
Windows服务不是IMO的坏主意,尤其是因为您希望它不断运行以尝试检测文件是否进入文件夹。 HTTP POST的限制很重要,但是您知道它将花费的时间和资源。我认为您最大的担忧是排队和资源管理。您将希望将这些传输中的每一个转移到BackgroundWorker进程中,以便可以独立完成多个文件,但是您还希望拥有一个管理类,该类可以限制可以启动的BackgroundWorker对象的数量。否则,您将遇到内存管理问题,网络阻塞以及谁知道其他问题。
您应该考虑最坏/最佳情况下文件出现在文件夹中的情况。 couid同时显示的最大文件数量是多少,文件可能是最大大小是什么,当文件夹开始“备份”时会发生什么,因为HTTP POST无法足够快地将它们传递到目的地。当目标主机不可访问时会发生什么?当系统重新启动“中交付”时会发生什么?是否有确定文件传送优先级的来源?在某些情况下必须中断文件传送或在事务上撤消文件传送吗?
我认为Windows服务是与FileSystemWatcher结合使用的正确选择。只要注意您的资源使用情况即可。
关于c# - C#Windows服务+长期运行的工作流程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3449319/