#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. вы на самом деле не ответили на мой вопрос, но вы предоставили мне хорошее чтение, я принимаю ваш ответ. Спасибо.