Удаление клиента после создания с помощью 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, утилизация канальных фабрик была плохим дизайном, который неоднократно менялся, поэтому краткий ответ - нет, вам нужно использовать что-то альтернативное этому.
Вот альтернативный метод избавления.