Обнаружить сбой соединения во время вызова асинхронного метода в службе WCF - PullRequest
2 голосов
/ 05 апреля 2011

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

По сути, это то, что я хочу:

  1. Клиент вызывает метод WCF
  2. Сервер начинает обрабатывать запрос асинхронно
  3. Клиент прерывает соединение (или по какой-либо причине соединение не устанавливается)
  4. Сервер должен быть уведомлен, что клиент прервал соединение

Возможно ли это?

Это для реализации с длинным опросом. Или же сервер может убедиться, что клиент получил ответ успешно? Если это не так, ответ должен быть сохранен для следующего запроса на опрос.

Ответы [ 2 ]

2 голосов
/ 05 апреля 2011

Я не знаю надежного способа узнать, подключен клиент или нет. См. это , это и это

Некоторые из предложенных альтернатив - использовать дуплексные каналы или использовать очереди. Решение на основе очереди будет иметь ответ сервера отправки в очередь и клиент выбирает эти ответы из очереди. Очередь может быть реализована в MSMQ, DB, Azure.

Спасибо

0 голосов
/ 05 апреля 2011

Можно настроить решение для опроса, в котором вместо того, чтобы клиент оставался подключенным, чтобы дождаться ответа, он выполняет запрос и немедленно отключается.Затем он повторно соединяется каждые X секунд для опроса, если запрос завершен или нет.

На сервере, если вы не видите опрос клиента в течение X * 2 секунд, то что-то случилось с клиентом, и выдолжен прервать запрос.

Для выполнения этой работы потребуется дополнительная инфраструктура на сервере, чтобы отслеживать, какие запросы активны и когда вы последний раз видели клиента, к сожалению.

...