取消长期运行的IFRAME



我有一个ASP.NET WebForm应用程序,它是一个托管一堆IFRAME"小部件"的主页。当加载主页面时,小部件的页面也会加载并开始自己的处理,包括连接到SQL Server以运行存储过程。

如果用户需要取消这些IFRAME处理,最好的方法是什么?我可能会从客户端将他们的SRC设置为另一个/空白页面,从而取消请求,但如果IFRAME页面已经调用了SQL Server,我该如何取消SQL处理?

EDIT:为了澄清IFRAMEd页面中最慢的一点是SQL Server存储过程调用,所以从本质上讲,这可以归结为-我可以从客户端启动取消SQL命令吗?

我想到的一个解决方案是使用当前运行的SqlCommands的静态List,每当用户调用cancel时,您都可以从该静态列表中提取命令,然后取消它。执行该命令的页面将收到命令cancel异常,然后它可以适当地处理它。

以下是您需要处理的事情:

  1. 不知何故,用户界面应该有一些键,这样当你按下取消按钮时,用户界面就会将该键发送到取消例程,而取消例程会使用该键提取SqlCommand并调用其Cancel方法
  2. 取消呼叫应通过AJAX完成
  3. 为了螺纹安全,应进行适当的锁定

更新:

,我在这里添加了一些细节

  1. 这是Project的链接http://goo.gl/noKUmj
  2. 以上项目是一个Web表单应用程序
  3. 您可以在该项目中添加任意数量的控制器,路由代码已经添加到Global.ascx中,因此新的控制器应该可以工作
  4. 但对于新的IFRAME取消,您不必添加另一个控制器。您只需要将PageName(作为密钥)传递给Cancel Controller
  5. 限制:该项目有限制,如果您点击IFRAME的取消按钮,它将取消所有当前请求,这意味着在多用户环境中,如果一个用户取消IFRAME-1,则其他用户的所有IFRAME-1都将被取消
  6. 您可以很容易地取消多个IFRAME,因为您可以看到取消按钮代码,它正在执行JavaScript代码,您只需要单击一次即可调用多个取消代码

正如您可能已经看到的项目,它使用PageName作为密钥来从List中提取SqlCommand。由于这一点,我们有如上所述的限制。由于PageName对于多个SqlCommands是相同的。

为了克服这一限制,您可以生成一个GUID作为密钥,并将QueryString中的GUID传递给Form1.aspxForm2.aspx页面,以便它们使用这些GUID s在List中添加命令。这些密钥应该在主机页面呈现时或在JavaScript中生成。

如果你不想做RnD,这里是使用GUID作为密钥的更新项目。:)http://goo.gl/I86S7Z

相关内容

  • 没有找到相关文章

最新更新