У меня есть сценарий публикации / подписки в WCF с использованием обратных вызовов net.tcp и Duplex. У меня есть ряд клиентов, которые подписываются на услугу, и это прекрасно работает. Однако иногда клиент закрывается без отмены подписки (клиентский компьютер переходит в спящий режим, происходит сбой компьютера, прерывается сетевое соединение и т. Д.), Что вызывает исключение при выполнении обратного вызова через мой список обратных вызовов.
Теперь я, конечно, могу поймать исключение и удалить вызывающий вызов вызов, но для меня это выглядит не так, как сценарий исключения, и далее в духе «ожидаемого поведения».
Есть ли событие, которое запускается при закрытии соединения, которое уведомит меня, чтобы я мог удалить обратный вызов из своего списка? Учтите, что это net.tcp, а не HTTP, поэтому состояние соединения должно быть известно.
Ясно, что фреймворк знает, что соединение было закрыто и удалено, потому что исключение является чем-то вроде «попытки вызвать удаленный объект».
EDIT:
Я должен отметить, что это не длительная транзакция. Это длительное соединение в сценарии публикации / подписки. По сути, обратный вызов используется для уведомления временных подписчиков о различных событиях по мере их возникновения. Каждое событие является изолированным и не длится долго.