0

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

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

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

4

1 回答 1

2

正如 Tim Rogers 在评论中指出的那样,可以通过多种方式设计这种需求。从您以报告为中心的用例来看,我可能会通过以下方式进行操作:

  1. 启动生成报告的 WCF 方法(将启动工作线程并返回某种进程/报告 ID)
  2. 用于检查操作状态的 WCF 方法(基于操作/报告 id)
  3. 常规控制器,它将从第 1 点调用该方法并允许查询特定用户正在进行的作业的状态
  4. 查看显示历史和正在进行的作业列表及其状态(我可能会实施 AJAX 请求以刷新状态以获得良好的用户体验)

当然这只是粗略的描述。而第 3 点和第 4 点很简单直接,第 1 点和第 2 点可以通过多种方式实现。您可以通过使用任务持久性(在内存或基于数据库中)实现自己的线程策略来解决此问题,您可以尝试使用 WCF 工作流服务等。希望这会有所帮助。

于 2013-04-02T10:35:47.810 回答