Calling CreateChannel() on the ChannelFactory causes the channel to open which is not the correct behaviour. The MS version will not open the channel till you try to use it.
This behaviour prevents you customising the channel creation with an asynchronous channel open.
The function call EnsureOpened() should be removed from the CreateChannel() method. (it is not called on any of the other overloads.