Just to clarify your last point - are you suggesting that any (conversation based) action should potentially be able to define identity information, in case they are used as the first action within a message link triggered action pipeline?
If so, then I think this should be fine. So in the example you mentioned, there would just be a SwitchAction, which would define the identity infomation to use in resolving the correct session, which will then result in the inbound message being routed to another action pipeline based on the switch paths.
Yes, right now just only two actions that I came up with are "RecieveMessageAction" and the "SwitchAction", will be shown in as "message link"..
It is possible that any control action (e.g. IfAction, SwitchAction, ParallelAction) could be the first action within an action pipeline triggered based on a message link.
So although there are some actions that would not be valid (e.g. a SendMessageAction - as it would need to be preceded by a ReceiveMessageAction to acknowledge the inbound message), these can be detected with static validation.
In general I think it would be better to define the 'identity' properties against the generic conversation based action based class, so that any conversation based action could express identity information as required.
OK, this solutions sounds good to me, we can make a restrictions in later, such as only first action should be of capability to have the "identity" information in the static conformance check.