Итак, у вас есть 2 проблемы: динамически создавать ChannelFactory и динамически вызывать его, и Reflection - решение для них обоих.
И ваш код, и код Ваутера хороши для динамического создания объекта ChannelFactory с помощью Reflection, проблема в том, что поскольку тип неизвестен во время компиляции, вы не можете привести его к типу, и все, что вы можете получить, - это не универсальный ( бесполезно) ChannelFactory.
Итак, чтобы создать ваш конкретный канал и затем вызывать методы для него, вы можете пройти долгий путь, снова используя Reflection самостоятельно ... или позволить самой среде выполнения использовать Reflection от вашего имени с помощью динамических средств. То есть измените свою последнюю (или последнюю) строку Ваутера на:
dynamic factory = factoryCtr.Invoke(.....
или
dynamic factory = Activator.CreateInstance(...
без необходимости включать "as ChannelFactory" в конце.
, а затем просто используйте:
dynamic channel = factory.CreateChannel();
//and now invoke the methods in your Interface
channel.TestMethod...