我有一个客户端 - 服务器架构,客户端使用.NET Remoting与服务器通信。服务器处理所有业务逻辑和数据库交互。我需要添加一个可能需要一段时间才能执行的操作,它返回的数据集可能非常大。我正在考虑使用异步调用。现在问题出现了:假设,客户端进行了这个异步调用,操作启动了SQL查询,用户关闭客户端或单击取消 - 操作会发生什么?有没有办法取消挂起的异步调用,它正忙于与SQL服务器通话?
感谢。
答案 0 :(得分:1)
您可以设计客户端/服务器交互,以便服务器让工作线程执行SQL操作,以便它可以接收来自客户端的另一个调用。因此,客户端调用1并说SQL工作。服务器将该工作提供给工作线程,并为新传入做好准备。然后客户拨打电话2并说“不要介意”。服务器会做一些簿记,以确保在完成工作线程时它不会回调客户端。
服务器可以安全地中断工作线程。我不确定。这会对SQL Server正在做什么产生任何影响。不确定。
答案 1 :(得分:0)
当客户关闭应用程序时,您正在进行的呼叫如何处理?您可以使用异步调用执行相同的操作。
是的,异步是长时间运行请求的方法。如果结果集足够大,你甚至可以考虑从服务器发送几个响应来发送它的块。
当用户单击“取消”时,您将向服务器发送一条新消息,表明您对结果不再感兴趣。如果SQL请求在线程池上运行,则无法真正取消它。