我的团队正在开发一个ASP.NET应用程序,其中包含一个导入功能。导入通常由用户在网页中输入一些设置(包括要导入的本地文件)启动。当用户点击“导入”时,应该上传文件然后导入。
导入可能是一个非常冗长的操作,因此不可能直接从aspx.cs代码执行,它需要以某种后台方式完成。同样重要的是,一旦上传文件,导入就不会丢失。我还希望导入立即启动 ,而不必等待每隔X分钟检查一次可用工作的服务或计划任务。
到目前为止,我发现的替代方案是:
还有其他选择吗?是否有人有上述替代方案的经验?
答案 0 :(得分:2)
你可以有一个Windows服务,它可以监视上传目录的变化(例如使用FileSystemWatcher)。
这样,在服务开始工作之前不会有(或只有极小的)延迟,并且您不需要从服务进行任何类型的轮询。
关于设置(由用户输入):将它们存储在数据库中(并从服务中查询)或将它们写入文件。
答案 1 :(得分:0)
如你所说,有不同的方法和选择。
我们已成功使用Windows服务作为代理(作业管理器)并创建了类型的工作类,这些类插入并配置了一个小的ASPX页面,而在添加新工作程序时根本不需要触摸代理。
通过这种方式,代理程序始终作为Windows服务运行,并且根据worker的类型及其配置,它调用worker的execute方法并执行作业。
你也可以使用像MSMQ那样简单的设计,我们也使用并且工作正常。
答案 2 :(得分:0)
这类似于根据我们的要求向用户发送电子邮件报告。
#2和#3都会定期检查数据库(每个都是排队项目的相关“状态”),并将所有排队但未处理的项目作为批处理处理 - 不是一次处理一个。
答案 3 :(得分:0)
调用执行实际工作的CLR存储过程的DB触发器?
我有很好的MSMQ经验,只是不要用太多数据超载MSMQ。 post import-id:s或类似于MSMQ并将实际有效负载存储在数据库表中。 MSMQ可以处理相当多的数据,但大多数管理工具都非常慢,因为他们倾向于在启动时查看队列中的所有消息(包括有效负载)。