ASP中的任务调度.NET使用c#工作
本文关键字:使用 工作 NET 任务调度 ASP | 更新日期: 2023-09-27 18:05:03
我想在MS SQL中导入具有巨大记录的csv文件,我应该能够上传任何文件,我上传的那一刻,它应该开始插入数据,一旦它完成通知我在页面上。
我有逻辑从CSV导入数据到MS SQL及其工作良好,但我一次只能做一个文件。
我想在那些上传的文件上并行后台处理,并在其成功完成时发出信号
我是一个非常新的。net请帮助我一步一步,这将是了不起的,如果你能解释与逻辑的例子
谢谢。
我认为您正在寻找后台(BG)服务来为您处理此类处理,通常您应该避免在asp.net (web应用程序)中处理批量数据
实现BG服务和消息传递队列将是您的理想解决方案。因此,你的asp.net (web应用程序)代码将负责启动文件的上传,并通过向BG服务排队发送消息来触发处理。之后,csv文件的处理将由BG服务根据队列完成。在BG服务的实现中,您还可以根据您的项目需要选择同步或同时处理。
使用MSMQ样本
上传文件后,在你的webapp中添加以下代码来发送消息到队列
const string queueName = @".'BGQueue";
if (!MessageQueue.Exists(queueName))
MessageQueue.Create(queueName);
MessageQueue messageQueue = new MessageQueue(queueName);
messageQueue.Label = "BG processing queue";
messageQueue.Send(fileName, "File to process");
Windows服务代码
const string queueName = @".'BGQueue";
MessageQueue messageQueue = new MessageQueue(queueName);
Message[] messages = messageQueue.GetAllMessages();
foreach (System.Messaging.Message message in messages)
{
//process the message, insert/update SQL etc.
}
messageQueue.Purge(); //cleanup the queue once done.
概念示例(我过去的一个实现)(不是一个好例子)
- 如果需要,在DB中创建一个消息表,用列存储文件名、状态和优先级
- Webapp将上传文件并在消息表中插入一条状态为ToDo的记录
- 创建一个windows服务,每隔x分钟或秒运行一个计时器来轮询消息表
- 每次轮询时,服务将从数据库加载下一个ToDo消息,并标记状态为In Progress 然后服务将处理(插入/更新SQL),一旦完成,它将更新记录状态为Done或删除记录
这只是你的一个概念,我希望这个概念可以帮助你实施你的战略。如果您需要一些代码示例,我可以为您创建一些,但可能需要一些时间