【发布时间】:2011-05-25 17:11:46
【问题描述】:
在我们的网站上,我们的版主可以查看人们发布的内容。这也适用于视频,尽管需要先转换视频。这要么在晚上自动发生(通过 Windows 服务),要么在主持人手动启动时更早发生。
现在,最后一部分是我的问题的来源。起初我以为我只是编写一个单独的服务来处理转换。每当主持人开始转换时,数据库中的记录就会更新,以将其标记为单次转换。然后服务将处理其余部分。当它只是一个文件时,这一切都很好。
但是想象一下这种情况,主持人 #1 启动服务。该服务运行并开始文件的转换。在此过程中,主持人 #2 开始转换不同的文件。它将尝试启动服务,但由于它已经启动而失败。该文件将被标记为单独转换,但不会转换,因为它无法启动服务。
现在我正在寻找新的想法来解决这个问题。
- 是否可以运行一项服务的多个实例?
- 我可以让服务更有活力吗?例如,如果主持人 #2 启动转换,它将启动服务,但如果服务已经启动,是否可以将文件添加到列表中? (在服务启动时,我创建了一个列表,该列表从数据库中读取每个文件以查找单个转换标志)
- 我知道我一直在考虑服务,是否有另一种方法来处理服务器上的操作,可以处理版主的多个请求?
我知道这听起来可能有点模糊,所以如果您有任何问题,请尽管提问。
编辑:也许我应该提供一些额外的信息,目前我是一名正在实习的学生,我的发起人并不想几乎立即转换文件。他们希望在晚上进行转换,除非版主为单个文件手动启动它。此外,网站和文件系统位于同一台服务器上(数据库位于单独的服务器上)。基本上,工作将在网站运行所在的同一台服务器上完成(目前无法分离)。他们担心服务器的性能。
任何评论将不胜感激! 亲切的问候, 弗洛里斯
【问题讨论】:
-
如果 asp.net 不支持某种工作队列,我会感到惊讶。您创建了固定数量的工作线程(在您的情况下可能是 1 个)来执行一个工作单元,然后继续检查要执行的新工作,直到出现某些情况。
-
我不能 100% 确定您的特定要求,但您是否考虑过多线程和线程池?
-
如果服务一直在运行并且只是查看一个按请求时间戳排序的表(一个简单的队列)怎么办?因此,它会定期查询这个队列表并按顺序处理项目——它甚至可以将工作发送到多个线程。我错过了什么吗?
-
@Bwawok 和 xman:我对那个领域有点陌生,但我愿意研究一下。这意味着我必须放弃我猜想的服务理念。您能否提供一些链接,让我可以了解更多信息?或者在 msdn 或 google 上可以找到足够的东西吗? @Ryan:这可行,但要做到这一点,我需要一直运行该服务,对吗?
-
@Ryan:忘记我最后的评论,你已经说过它一直在运行。
标签: c# asp.net windows-services