从Windows窗体异步执行存储过程然后断开连接?

20 c# asynchronous stored-procedures sql-server-2005

我从我的应用程序调用存储过程,可能需要30分钟才能执行.

我不想让我的用户在整个时间段内打开应用程序.所以我想调用sproc,让它飞起来,让他们关闭应用程序并稍后再回来.

我怎样才能做到这一点?

Rem*_*anu 26

这实际上是一种非常常见的情况.你不能做任何基于客户端的事情,因为客户可能会离开并断开连接,你将失去迄今为止所做的工作.解决方案是使用Service Broker Activation:您在数据库中创建服务并附加激活的过程.在您的应用程序(或ASP页面)中,您向服务发送消息并为您的过程嵌入必要的参数.应用程序提交后,该消息将激活服务过程.服务过程从消息中读取参数并调用您的过程.由于激活发生在与原始连接无关的服务器线程上,因此这是可靠的.实际上,服务器甚至可以在执行过程时关闭并重新启动,并且工作将回滚然后恢复,因为激活消息将在重新启动后再次触发服务过程.

更新

我已经发布了如何执行此操作的详细信息,包括我的博客上的示例代码:异步过程执行.

  • 博客上的优秀细节! (2认同)
  • 是! 非常感谢.要确保的一件事是:需要为数据库启用服务代理.(数据库属性 - > SSMS中的选项)或ALTER DATABASE ... SET ENABLE_BROKER.好消息是这甚至适用于SQL Server的Express Edition! (2认同)

Ben*_*esh 1

让他们关闭应用程序并稍后再回来

如果您要允许他们完全关闭应用程序,则必须启动一个单独的 .exe 或不同线程池中的某个东西来执行调用存储过程的代码。否则,当您关闭应用程序时,您的线程将会死亡。