Удаление клиента после создания с помощью WebChannelFactory

#c# #wcf #dispose #webchannelfactory

#c# #wcf #удаление #webchannelfactory

Вопрос:

В моем текущем производственном коде и согласно документации на msdn, способ создания клиента следующий

 using (WebChannelFactory<IServiceInterface> cf
      = new WebChannelFactory<IServiceInterface>("http://service.url"))
{
    IServiceInterface client = cf.CreateChannel();
    client.CallTheMethod();
}
  

учитывая, что у меня есть этот интерфейс:

 public interface IServiceInterface
{
    void CallTheMethod();
}
  

Однако я заметил, что объектный клиент, созданный WebChannelFactory, также реализует IDisposable. Итак, я хочу также удалить этот объект. Я не нашел другого способа, кроме:

 using (WebChannelFactory<IServiceInterface> cf
      = new WebChannelFactory<IServiceInterface>("http://service.url"))
using(IDisposable client = (IDisposable)cf.CreateChannel())
{
    ((IServiceInterface)client).CallTheMethod();
}
  

Я нахожу это уродливым. Итак :

  • Мне действительно нужно его утилизировать? Я имею в виду, что, возможно, он удален, когда вы удалили фабрику (возможно, если фабрика сохраняет ссылку на каждый созданный ею объект)?
  • Если да, есть ли у вас способ получше?

Ответ №1:

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

Вот альтернативный метод удаления.

Комментарии:

1. вы на самом деле не ответили на мой вопрос, но вы предоставили мне хорошее чтение, я принимаю ваш ответ. Спасибо.