2012-01-20 2 views
1

У нас есть служба WCF, размещенная под управлением Windows. Клиент этой службы настроил closeTimeout, receiveTimeout, openTimeout, sentTimeout установлен на 5 минут. Служба также имеет то же самое. В определенных обстоятельствах служба WCF может занять более 5 минут для обработки задачи. В этом случае клиент прерывает вызов, но процесс обслуживания продолжает работать, пока он не завершит свою работу.Задача сервера прерывания WCF, если клиент отключен

Теперь возникает вопрос: существует ли какая-либо конфигурация/технология, которая бы обнаружила, что клиент отключился или тайм-аут (или что-то еще?), Чтобы служба WCF могла просто прекратить выполнение своих задач?

ответ

1

It'snoteasy, если не impossible (так что это в значительной степени дублирует вопрос).

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

Затем клиенты вызывают QueueQuery(query), что делает не более того, и возвращает идентификатор в запрошенном очереди. После этого клиент может продолжить опрос QueryStatus(id), чтобы восстановить статус (например, «Очередь», «Запуск», «Закончено»), и когда запрос завершен, он может позвонить QueryResults(id).

Между тем другая служба (то есть служба Windows, а не служба WCF) продолжает выполнять все запросы в очереди.