【问题标题】:Long time operations in MVC and WCF serviceMVC 和 WCF 服务中的长时间操作
【发布时间】:2013-03-23 00:09:03
【问题描述】:

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

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

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

【问题讨论】:

  • 你想达到什么目的?最佳实践取决于各种因素——您是否需要高可扩展性、低延迟、快速的用户反馈等。
  • @Tim Rogers,我已经编辑了我的问题以使其更具体

标签: multithreading wcf model-view-controller architecture


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 2010-10-02
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多