2

我有一个客户端-服务器架构,其中客户端使用 .NET Remoting 与服务器通信。服务器处理所有业务逻辑和数据库交互。我需要添加一个可能需要一段时间才能执行的操作,并且它返回的数据集可能非常大。我正在考虑为此使用异步调用。现在问题出现了:假设客户端进行了这个异步调用,操作启动了 SQL 查询,用户要么关闭客户端,要么单击取消——操作会发生什么?有什么方法可以取消挂起的异步调用,它正忙于与 SQL 服务器交谈?

谢谢。

4

2 回答 2

1

您可以设计您的客户端/服务器交互,以便服务器让工作线程执行 SQL 工作,以便它准备好接收来自客户端的另一个调用。因此,客户拨打电话 1 并说做 SQL 工作。服务器将该工作交给工作线程,并为新的传入做好准备。然后客户拨打电话 2 并说“没关系”。服务器会做一些记账,以确保在工作线程完成时它不会回调客户端。

服务器能否安全地中断工作线程。我不确定。这会对 SQL Server 正在做什么有任何影响。没有把握。

于 2008-11-12T03:10:46.060 回答
0

当客户端关闭应用程序时,您现在如何处理正在进行的呼叫?你可以用异步调用做同样的事情。

是的,异步是处理长时间运行请求的方式。如果结果集足够大,您甚至可以考虑从服务器发送多个响应的块。

当用户单击取消时,您将向服务器发送一条新消息,说明您不再对结果感兴趣。如果 SQL 请求在线程池上运行,则无法真正取消它。

于 2008-11-27T15:00:56.567 回答