0

我有一个 asp.net 网页,其中按钮单击事件进程运行 35 分钟,在前端我使用 ajax 并显示进度条图像。如果该过程(按钮单击事件)在 30 分钟内完成,则页面重新加载成功,否则即使在该过程完成后仍会显示“进行中”图像,直到时间AsyncPostBackTimeout(设置为 60 分钟)并显示服务器时间60 分钟后出问题。如果我做错了什么,请告诉我。

4

2 回答 2

3

没有看到您的代码,我无法告诉您出了什么问题。但是,我可以推荐几个选项:

  • 将任务分解为多个步骤(而不是一个长链任务)。对用户来说可能需要做更多的工作,但至少他们不会在页面上停留半小时+(哎呀!)。
  • 使用分析器查看实际花费了这么长时间,看看您是否无法优化代码以减少流程。例如,如果它是一个数据库调用,那么创建一个存储过程而不是多个选择/更新(数据来回进行)可能是有意义的——在需要最终结果之前一直在机器上进行处理。
  • 对于长任务,将流程分解为服务或单独的实体(并且只让服务报告进度)可能是有意义的。例如,MSMQ是一种运行专用服务并在需要时将任务传递给它的好方法。请记住,这现在创建了另一个层,这是一个需要维护的地方。
于 2013-07-19T18:53:45.333 回答
1

如果一个过程需要 30 分钟,明天可能需要 60 分钟或更长时间,因为您的服务器将忙于做其他事情。这种方法从根本上是错误的。

我的建议是将如此长的任务放到另一层,即系统服务。服务运行,从队列中挑选任务,一一执行。前层只是每隔几秒/分钟偷看一下,看看操作是否完成。或者更好的是,用户不用等待,他们会做其他事情,最终以某种方式通知他们长时间运行的任务已经完成。

于 2013-07-19T19:01:03.723 回答