2008-11-12 74 views
2

我有一個客戶端 - 服務器架構,客戶端使用.NET Remoting與服務器進行通信。服務器處理所有業務邏輯和數據庫交互。我需要添加一個可能需要一段時間才能執行的操作,並且它返回的數據集可能非常大。我正在考慮爲此採用異步調用。現在問題就出現了:假設客戶端做了這個異步調用,操作啓動了SQL查詢,並且用戶要麼關閉客戶端,要麼點擊取消 - 操作會發生什麼?有什麼辦法可以取消正在忙於與SQL服務器通話的掛起的異步調用?取消異步遠程調用

謝謝。

回答

1

您可以設計客戶端/服務器交互,以便服務器讓工作線程執行SQL工作,以便它可以接收來自客戶端的另一個調用。所以,客戶打電話1,並說做SQL工作。服務器將該工作交給工作線程,並準備好接收新進來的數據。然後客戶撥打電話2並說,「沒關係」。服務器會做一些簿記工作,以確保它在工作線程完成時不會回調客戶端。

服務器可以安全地中斷工作線程嗎?我不確定。這對SQL Server正在做什麼有影響嗎?不確定。

0

當客戶關閉應用程序時,您現在正在進行什麼操作?你可以用異步調用來做同樣的事情。

是的,異步是長時間運行請求的方式。如果結果集足夠大,您甚至可以考慮使用來自服務器的多個響應發送它的塊。

當用戶單擊取消時,您會向服務器發送一條新消息,指出您不再對結果感興趣。如果SQL請求正在線程池上運行,則無法取消它。