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

发布于 2024-08-23 22:46:59 字数 374 浏览 7 评论 0原文

我在此处看到一个关于此问题的问题。 但是,就我而言,Windows 服务在表上运行长时间运行的插入/更新,我需要从 ASP.NET 应用程序取消该操作。 在上面的链接中,Burnsys 建议应该终止 Sql 服务器会话。这真的是唯一的方法和良好的做法吗?

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

请指教。

预先感谢您提出的所有宝贵意见, 阿什什

I see a question about this here.
However, in my case, It is the windows service which in running the long running insert/update on a table and I need to cancel the operation from my ASP.NET application.
In the above link Burnsys suggests that one should kill the Sql server session. Is that really only way and a goood practice to do this?

Also, in the same poset somebody suggests one can use SqlCommand.Cancel to cancel. However, I am not sure how can I cancel the command from the windows service from ASP.NET application.

Please advice.

Thanks in advance for all your valuable comments,
Ashish

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

贱人配狗天长地久 2024-08-30 22:46:59

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

如果您仍在使用sql server 2005,您仍然可以使用KillProcess(ProcessId)。因此,将 processId 存储到该表中,asp.net 应用程序可以向 sql server 发送终止进程命令(如果您有权限)。

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

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

...
            command.Cancel();

1) If you can change the code of windows service or stored proc, I suggest creating some table on sql server to store states of long running task. Windows service (than could be executed by service) would add records to this table. ASP.NET application would monitor this table (manualy) to stop any runnning process.

If you still using sql server 2005, you still can use KillProcess(ProcessId). So store processId to this table and asp.net application can send kill process command to sql server (if you have permissions).

2) If you have any programming (wcf for example) interface of service that hosted in windows service, so I suggest exetuting LR task asynchronously and add method to cancel this task. ASP.NET application could call this cancel method.

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

...
            command.Cancel();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文