Удаление клиента после создания с помощью WebChannelFactory - PullRequest
2 голосов
/ 21 апреля 2011

В моем текущем производственном коде и в соответствии с документацией по 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 Ответ

5 голосов
/ 21 апреля 2011

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

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