Очистка ресурса при резком отключении WCF-службы - PullRequest
3 голосов
/ 10 июня 2009

У меня есть сессионная служба WCF, которая порождает процесс и открывает именованный канал для этого процесса при вызове операции IsInitiating. Когда вызывается операция IsTerminating, служба отправляет сообщение по каналу, чтобы сообщить процессу на другом конце, что он может завершить работу. К сожалению, если клиент не отключается изящно (вызывая операцию IsTerminating), то сообщение никогда не отправляется в канал, а другой процесс никогда не завершается.

Я пытался сделать так, чтобы моя служба реализовывала IDisposable (в надежде, что, когда время сеанса на сервере истечет, он вызовет мой метод Dispose), но, похоже, это не работает.

Можно ли как-нибудь вызвать код на стороне сервера, когда клиент отключился (даже если мне придется ждать inactivityTimeout)?

1 Ответ

0 голосов
/ 30 августа 2009

Идея с IDisposable должна работать. Установите свой контекстный режим экземпляра как:

Из MSDN: http://msdn.microsoft.com/en-us/magazine/cc163590.aspx

[ServiceBehavior (InstanceContextMode = InstanceContextMode.PerSession)] класс MyService: IMyContract {...}

Сеанс обычно заканчивается, когда клиент закрывает прокси, который уведомляет службу о завершении сеанса. Если служба поддерживает IDisposable, будет вызван метод Dispose. На рисунке 4 показаны контракт и служба, настроенные для использования частного сеанса и их клиента. Как видно из вывода, клиент получил выделенный экземпляр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...