SOA does not imply a specific carrier protocol and neither does it imply RPC semantics; in fact, loose coupling of services forces developers into an asynchronous message passing pattern. Actually true asynchrony is often not necessary: synchronous one-way (void returns) RPCs can be used and often are in Web Services.
Therefore, multiple protocols should be supported simultaneously. In most cases, clients will know the communication protocol to use when interacting with a service; however, in some situations this may not be the case, and the communication stack may need to be assembled dynamically (via a hand-shake protocol, where the client stub may have to be dynamically constructed. Services may be available via multiple different protocols simultaneously, e.g., CORBA IIOP and JMS. A service repository (aka Name Service/Trading Service) will maintain service identities with their endpoint references and contract definitions (CORBA IDL, WSDL, etc.)