我想知道通过具有Web UI的ASP.NET MVC 3用户界面触发持久/运行存储过程调用的简单有效方法是立即返回并且用户“允许”关闭浏览器并稍后再检查。
我真的不想为此创建一个Windows服务,我正在考虑使用ThreadPool.QueueUserWorkItem
方法,回收甚至不是一个大问题,应用程序不会负载很重,是我们正在制作的内部WebUI,用于简化一些维护任务。
是否有人尝试过ThreadPool.QueueUserWorkItem
方法并使用应用程序缓存或类似方式来保存存储过程调用的状态,如“EXECUTING”或“COMPLETED”?
答案 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请求外部访问应用程序缓存/会话,因此您必须找到另一种方法来保存任务的状态。