Here are a few tips for message versioning:
- If the change cannot be implemented by extending the original message type, then it is not a new version of the message; it is a new message type
- If you are unsure, prefer to create a new message type rather than version an existing message
- Versioned messages should not be used with request/response as the message types are part of the request/response contract and Request<V1,Response> is not the same as Request<V2,Response>, even if V2 extends V1 (that is, public class V2 : V1 {})
- Versioned messages should not be used with send/receive as this is targeted sending and therefore there is a declared dependency between the sender and the receiver