title: Self-contained or versionable messages?
body: <p>I'm having some message design head-aches. I want to start up an NServiceBus saga for a long running process. Part of the data needed to do the initialization is a list of constraints, which are implementations of an abstract base class. As I've understood the design philosophy, messages should ideally be </p>
  
  <ol>
  <li>Self-contained, that is contain all the data needed to process them. Following this, I would pass along all the list of constraints in the message.  </li>
  <li>Versionable. NServiceBus does this by using an XML serializer which does not pass along type information (see <a href="http://tech.groups.yahoo.com/group/nservicebus/message/6575" rel="nofollow">this thread answer by Udi</a>). In my case, that means I cannot on the recieving end pick up the specifics of the constraints. </li>
  </ol>
  
  <p>The serialization problems can be "solved" by using the <code>BinarySerializer</code>, but this does not seem to be a recommended practice since it breaks versioning. The alternative is to send along some identifier so that the constraints can be retrieved from some datastore, but that would remove the "self-containedness".</p>
  
  <p>Is there a third way here, or do I simply have to choose some "least bad" solution?</p>