Я нашел основной ответ неточным, поэтому я отвечаю здесь.
Очевидно, что Microsoft создала абсолютный беспорядок из каналов и фабрик и клиентов. Документация также не помогает, так как они, кажется, существуют только для того, чтобы скрыть беспорядок, поэтому мне пришлось прибегнуть к тестированию.
Из-за проблем с производительностью, связанных с некэшируемыми каналами, в v3.5 была изменена реализация, чтобы устранить их, и добавлено кэширование, но это только усложнило проблему.
Точка канала в ChannelFactory
фактически не отличается от канала, используемого IClientChannel
при создании канала с использованием ChannelFactory.CreateChannel()
. Это все тот же горшок. Поверь мне нет? Попробуйте:
ChannelFactory<IService> factory = new ChannelFactory<IService>();
// ...
IService service = factory.CreateChannel();
factory.Close();
service.DoIt() // Throws object disposed exception
Так что на самом деле внутренне это все тот же канал. Лично я начал распоряжаться фабриками каналов, а не клиентскими каналами, и не сталкивался с какими-либо проблемами. Я также попытался сделать это в цикле с созданием 100000 клиентских каналов и только закрытием ChannelFactory
.