MVC长时间运行EF存储过程调用

时间:2012-02-01 12:06:57

标签: c# .net asp.net-mvc entity-framework

我想知道通过具有Web UI的ASP.NET MVC 3用户界面触发持久/运行存储过程调用的简单有效方法是立即返回并且用户“允许”关闭浏览器并稍后再检查。

我真的不想为此创建一个Windows服务,我正在考虑使用ThreadPool.QueueUserWorkItem方法,回收甚至不是一个大问题,应用程序不会负载很重,是我们正在制作的内部WebUI,用于简化一些维护任务。

是否有人尝试过ThreadPool.QueueUserWorkItem方法并使用应用程序缓存或类似方式来保存存储过程调用的状态,如“EXECUTING”或“COMPLETED”?

2 个答案:

答案 0 :(得分:2)

您应该考虑托管WCF service through MSMQ http binding.这样,您可以直接通过http调用将此Web服务请求插入异步队列。

为了让用户更容易使用该服务,您可以制作WCF endpoint a REST endpoint.

您可以通过javascript直接发布到REST服务,利用Microsoft提供的开箱即用排队技术,而不必处理多线程。

您还可以使用Microsoft提供的AsyncController和开箱即用的解决方案。

答案 1 :(得分:1)

任何排队进入ThreadPool的东西都会将资源窃取到ASP.NET请求处理队列中。如果您计划运行许多长时间运行的任务,那么您应该使用不同的线程/线程池。如果它只是偶尔一次,那么它肯定是一个可行的解决方案。

在任何情况下,请记住,您无法从Web请求外部访问应用程序缓存/会话,因此您必须找到另一种方法来保存任务的状态。