Как получить уведомление, если дуплексный сеанс WCF преждевременно закрыт - PullRequest
1 голос
/ 24 августа 2009

У меня есть сценарий публикации / подписки в WCF с использованием обратных вызовов net.tcp и Duplex. У меня есть ряд клиентов, которые подписываются на услугу, и это прекрасно работает. Однако иногда клиент закрывается без отмены подписки (клиентский компьютер переходит в спящий режим, происходит сбой компьютера, прерывается сетевое соединение и т. Д.), Что вызывает исключение при выполнении обратного вызова через мой список обратных вызовов.

Теперь я, конечно, могу поймать исключение и удалить вызывающий вызов вызов, но для меня это выглядит не так, как сценарий исключения, и далее в духе «ожидаемого поведения».

Есть ли событие, которое запускается при закрытии соединения, которое уведомит меня, чтобы я мог удалить обратный вызов из своего списка? Учтите, что это net.tcp, а не HTTP, поэтому состояние соединения должно быть известно.

Ясно, что фреймворк знает, что соединение было закрыто и удалено, потому что исключение является чем-то вроде «попытки вызвать удаленный объект».

EDIT:

Я должен отметить, что это не длительная транзакция. Это длительное соединение в сценарии публикации / подписки. По сути, обратный вызов используется для уведомления временных подписчиков о различных событиях по мере их возникновения. Каждое событие является изолированным и не длится долго.

1 Ответ

3 голосов
/ 24 августа 2009

Прошло какое-то время, это из памяти, так что я могу ошибаться, но я думаю, что, возможно, если вы сделаете IEndpointBehavior, который нажимает на DispatchRuntime, чтобы добавить IInputSessionShutdown, то вы можете получить уведомление о завершении сеансового канала .

http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.dispatchruntime.inputsessionshutdownhandlers.aspx

...