【发布时间】:2009-10-20 11:47:16
【问题描述】:
我创建了一个最多 100 个循环来在 db 中插入任何数据。 但是当我关闭浏览器时,我希望它停止但它在后台继续循环并填充我的数据库。我怎样才能阻止它?
谢谢
【问题讨论】:
-
你的代码是什么样的?
我创建了一个最多 100 个循环来在 db 中插入任何数据。 但是当我关闭浏览器时,我希望它停止但它在后台继续循环并填充我的数据库。我怎样才能阻止它?
谢谢
【问题讨论】:
不保证它会起作用,但您可以尝试HttpResponse.IsClientConnected 属性。
for (int i = 0; i < 100; i++)
{
if (!Response.IsClientConnected) break;
// insert the next row
}
【讨论】:
听起来您已经从 ASP.NET 表单开始此过程,服务器端代码执行循环以响应某些事情(加载 ASP.NET 表单或单击按钮等)。
请注意,关闭浏览器窗口不会停止您在“服务器”上调用的任何长时间运行的代码进程。虽然这可能在同一台机器上运行,但这里的“服务器”是IIS/Cassini 进程,它将您的网页提供给“客户端”(您的浏览器)。
为了停止这种情况,您需要停止/关闭 IIS 或 Cassini(Visual Studio 在本地开发计算机上运行 Web 应用程序时使用的 Cassini 小型 Web 服务器),或停止/关闭 SQL Server 进程.
编辑:除了提到停止 IIS/SQL 之外,我注意到其他答案的反对意见。当然,这是一种“最后的”机制,用于停止由“客户端”调用但在“服务器”上运行的长时间运行的进程。如果这是在“真实”应用程序中完成,并且您希望允许用户取消长时间运行的应用程序,则需要 Marc 建议的方法(即使用 AJAX,“轮询”网页AJAX“刷新”并响应后续用户输入(即按钮点击)。
【讨论】:
如果您在服务器上通过单个 http 请求执行此操作(例如,响应代码隐藏中的按钮事件),那么服务器并不真正关心浏览器。如果您希望在浏览器停止时停止插入,我建议您可能通过 ajax 循环来执行此操作 - 但请注意,这会慢得多,因为您将在服务器上有 100 次往返和 100 组单独的处理.
【讨论】:
创可贴解决方案怎么样:
让您的网页每 5 秒左右向服务器发送一次 keep-alive AJAX 调用,如果未收到 keep-alive 则中止:)
【讨论】:
关闭 SQL Server 和/或 IIS。
编辑: ...假设您犯了一个编程错误,您的数据库一直在填满,而您非常想阻止它——这就是我理解您的问题的方式。
【讨论】: