Отмена асинхронного удаленного вызова - PullRequest
2 голосов
/ 12 ноября 2008

У меня есть клиент-серверная архитектура, где клиент общается с сервером с помощью .NET Remoting. Сервер обрабатывает всю бизнес-логику и взаимодействие с базой данных. Мне нужно добавить операцию, выполнение которой может занять некоторое время, а возвращаемый набор данных может быть довольно большим. Я думаю об использовании асинхронного вызова для этого. Теперь возникает проблема: предположим, клиент сделал этот асинхронный вызов, операция запустила SQL-запрос, и пользователь либо закрыл клиент, либо нажал кнопку Отмена. Есть ли способ отменить ожидающий асинхронный вызов, который занят разговором с сервером SQL?

Спасибо.

Ответы [ 2 ]

1 голос
/ 12 ноября 2008

Вы можете спроектировать взаимодействие клиента и сервера таким образом, чтобы сервер позволял рабочему потоку выполнять SQL-операции, чтобы он был готов принять другой вызов от клиента. Итак, клиент делает вызов 1 и говорит, что SQL работает. Сервер передает эту работу рабочему потоку и готов к новому входящему. Затем клиент звонит 2 и говорит: «Не бери в голову». Сервер будет вести некоторую бухгалтерию, чтобы убедиться, что он не перезванивает клиенту, когда рабочий поток завершен.

Может ли сервер безопасно прервать рабочий поток. Я не уверен. Будет ли это иметь какое-либо влияние на то, что делает SQL Server. Не уверен.

0 голосов
/ 27 ноября 2008

Что вы делаете сейчас с незавершенным звонком, когда клиент закрывает приложение? Вы можете сделать то же самое с асинхронным вызовом.

Да, асинхронный режим - это путь для длительных запросов. Если набор результатов достаточно большой, вы можете даже подумать об отправке его с несколькими ответами с сервера.

Когда пользователь нажимает кнопку Отмена, вы отправляете на сервер новое сообщение о том, что вы больше не заинтересованы в результатах. Если запрос SQL выполняется в пуле потоков, вы не можете отменить его.

...