Вы не должны позволять клиентским прокси WCF просто выпадать из этой области. Ваш код будет работать, но он также будет пропускать ресурсы. Все клиенты WCF реализуют IDisposable
, но это один из случаев, когда нельзя просто использовать using
или Dispose
; Service Proxy Helper можно использовать для синхронных операций, но приведенный там код очистки демонстрирует, как безопасно избавиться от клиента в любом контексте.
При выполнении асинхронных операций, подобных этой, что-то должно быть аналогичным образом для управления временем жизни этого клиента. Обычно любой класс, которому «принадлежит» клиент WCF, должен сам реализовать IDisposable
, хранить ссылку на этого клиента в приватном поле и вызывать Close
/ Abort
на клиенте в своем методе удаления.
Как правило, любой класс, который фактически реализует асинхронный метод обратного вызова, будет владельцем, и поэтому этот класс должен управлять временем жизни; поэтому, если вам действительно нужен клиент «по требованию», может также иметь смысл выполнить очистку после завершения обратного вызова.
Создание клиентов WCF тоже не из дешевых, поэтому вам следует постараться сохранить их как можно дольше, а не создавать их как бы специально; думайте о них как о зависимостях всего приложения.
Если вы просто держите экземпляр клиента рядом, то вам также не нужно продолжать подписываться на его события; вопрос фактически уходит.