I had an epiphany the other day in which I realized there's no need for both the MSMQ and MQSeries channels to have their own, dedicated SoapTransport.  Instead, the transport itself is really quite generic.  It's the transport-specific channel that we really care about.  Thus, SoapAsyncTransport was born to service the needs of both queuing technologies.

SoapAsyncTransport's constructor takes a System.Type of a SoapChannel-derived class and a string representing the scheme for the transport (i.e., soap.msmq or soap.mqseries.)  It dynamically creates transport-specific channels as needed.

I bet the SMTP model could be brought into this model ...