离线处理POST请求

3

我正在开发一个应用程序,其中我将向.NET Web服务提交POST请求。

当前实现是即时处理请求并提供响应。在实际部署中,需要处理大量数据,因此必须离线处理请求。

有哪些策略可以完成这个任务?

我应该实现一个Windows服务,还是一个定期调用应用程序执行所需任务的计划任务?


如果您正在以 Web 服务的形式进行操作,那么您需要有某种即时响应,即使只是验证请求是否已成功提交。之后,是否需要持续运行服务以监视请求队列或者定期执行以逐步完成工作,应该根据您需要多快获得响应以及处理请求是否有任何批量优势来决定。 - ngroot
@ngroot:对于应用程序而言,最好不要批量处理请求。事实上,最好一次只处理一个请求。另一个问题是,当处理完成时需要通过电子邮件通知用户。因此,可能会有一些配置信息需要稍后更改。 - Shamim Hafiz - MSFT
2个回答

4
这可能是使用MSMQ的一个很好的案例。您的Web服务可以将传入数据填充到队列中,另一个进程可以读取这些消息并执行必要的处理。
这里有一个关于MSMQ的好概述: http://www.primaryobjects.com/CMS/Article77.aspx

2
如果您有大量数据无法实时处理,我可能会设置服务以执行以下操作:
ProcessRecordViaPost
1. 在“队列”数据库中创建具有唯一ID和所有其他要处理的信息的新记录 2. 立即向客户端返回唯一ID
ReadRecordViaGet
1. 检查队列,如果已处理,则返回数据;如果未处理,则返回状态码(在其前面的队列项数?)
我还会设置一个Windows服务,不断从队列中获取最旧的项目,并处理它并继续处理下一个最旧的项目。

由于该服务将持续抓取数据,将请求保存在数据库中并不明智,对吧?因此,最好使用MSMQ来存储这些请求。 - Shamim Hafiz - MSFT
如果它们只是要被处理和删除,那么使用数据库的确会有点大材小用。但是,既然您不会立即将数据返回,当用户最终回来寻找数据时,您的Web服务将如何返回数据呢?看起来您需要至少将队列存储到用户发出第二个请求之前,对吗? - Nate
Bross:不会有第二次请求。用户将通过电子邮件通知。 - Shamim Hafiz - MSFT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接