MVC和WCF服务中的长时间操作

时间:2013-04-01 20:45:10

标签: multithreading wcf model-view-controller architecture

我有一个MVC应用程序,它使用WCF服务作为数据库的连接层。 WCF上的某些操作非常耗时。那么,这个问题的最佳解决方案是什么?我应该在我的MVC应用程序和WCF中的Task.Factory.StartNew中使用异步控制器吗?或者我应该在WCF中的MVC和Task.Factory.StartNew中使用简单的控制器和AJAX吗?或者最好在MVC中使用Task.Factory.StartNew?或者也许最好在WCF中使用简单的线程?

EDITED: 例如,我的服务生成报告 - 这需要很长时间。我希望用户能够开始生成报告而不是等到它完成 - 例如显示'生成'。然后,他可以开始生成另一个,等等。生成报告完成后 - 将其返回给用户。

请提供此类型解决方案的最佳实践或向我展示正确的方向,非常感谢。

1 个答案:

答案 0 :(得分:2)

Tim Rogers在评论中指出,这种要求可以通过多种方式设计。根据您的用例关注报告我可能会以下列方式进行判断:

  1. 启动生成报告的WCF方法(将启动工作线程并返回某种进程/报告ID)
  2. 用于检查操作状态的WCF方法(基于操作/报告ID)
  3. 常规控制器,它将从第1点调用该方法并允许查询特定用户正在进行的作业的状态
  4. 查看使用状态显示历史和正在进行的作业列表(我可能会实施一个AJAX请求来刷新状态以获得良好的用户体验)
  5. 当然这只是一个粗略的描述。而点3和4是简单且直接的,点1和2可以以多种方式实现。你可以通过实现自己的任务持久性线程策略(在内存或基于数据库的情况下)来解决这个问题,你可以尝试使用WCF工作流服务等。希望这会有所帮助。