代码之家  ›  专栏  ›  技术社区  ›  Ashish Gupta Shiva

当操作由Windows服务执行时,如何从ASP.NET UI取消长时间运行的数据库插入/更新操作

  •  0
  • Ashish Gupta Shiva  · 技术社区  · 15 年前

    我看到一个关于这个的问题 here . 但是,在我的例子中,是Windows服务在对表运行长时间运行的insert/update时,我需要从ASP.NET应用程序中取消该操作。 在上面的链接中,Burnsys建议应该终止SQL Server会话。这真的是唯一的方法和一个古奥的做法吗?

    另外,在同一个poset中,有人建议可以使用sqlcommand.cancel取消。但是,我不确定如何从ASP.NET应用程序中取消Windows服务的命令。

    请给出建议。

    提前感谢您的宝贵意见, 阿施施

    1 回复  |  直到 15 年前
        1
  •  0
  •   garik    15 年前

    1)如果您可以更改Windows服务或存储过程的代码,我建议在SQL Server上创建一些表来存储长时间运行任务的状态。Windows服务(服务无法执行)将向该表添加记录。ASP.NET应用程序将监视此表(手动)以停止任何正在运行的进程。

    如果仍在使用SQL Server 2005,则仍可以使用KillProcess(ProcessID)。因此,将processID存储到此表中,ASP.NET应用程序可以向SQL Server发送kill process命令(如果您有权限)。

    2)如果您有任何托管在Windows服务中的服务编程接口(例如wcf),那么我建议异步执行lr任务,并添加方法来取消此任务。ASP.NET应用程序无法调用此取消方法。

    SqlCommand command = new SqlCommand();
                command.BeginExecuteNonQuery();
    
    ...
                command.Cancel();