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 ...