Я читал много статей о WCF онлайн, и кажется, что большинство людей кешируют объекты ChannelFactory, но не сами каналы.Похоже, что большинство людей боятся использовать кэширование каналов, потому что они не хотят обрабатывать сетевые сбои, которые могут сделать кэшированный канал непригодным для использования.Но это можно легко исправить, перехватив CommunicationException в методе, воссоздав канал и воспроизведя метод с помощью Reflection.
Тогда есть люди, которые думают, что кэширование каналов плохо, потому что все коммуникации будут проходить через один канал.См. Следующую статью.
http://social.msdn.microsoft.com/Forums/is/wcf/thread/9cbdf92a-a749-40ce-9ebe-3f2622cd78ee
Обязательно ли это плохо?Разве вы не можете делиться каналами между потоками?Будет ли производительность снижаться из-за того, что несколько вызовов методов, выполненных для этого одного канала, будут обрабатываться последовательно?
Я не нашел доказательств того, что совместное использование каналов приведет к снижению производительности.Я обнаружил, что использование кэшированного канала примерно в 5 раз быстрее, чем использование не кэшированного канала, даже если это означает необходимость использования Reflection для вызова методов на кэшированных каналах.
Другое преимуществоне нужно окружать все ваши вызовы WCF операторами try / catch / finally для вызова Close (), Abort () или Dispose () на канале, когда вы закончите с ним.Мне кажется, что WCF сделала шаг в неправильном направлении, заставив разработчиков управлять ресурсами канала WCF.В .NET Remoting вы создали прокси с помощью класса Activator, и вам не нужно было ничего с ним делать, чтобы его очистить..NET Framework все это обработал для вас.