title: How do I handle "Receive" calls being made out of order?
body: <p>I have a WF4 service that emulates a sales funnel.  It works by starting with a "Registration" receive call.  After that, there are 10 similar stages (comprised of a 2 receives at each stage).  You can't advance past a stage until after the current stage validates the data received.  What I'm unsure about though is, even though my client app wouldn't allow for it, how can I make my workflow prevent anyone from calling the receive operations out of order?  In my test console app, I let the user call any receive operation (just because I wanted to see what happens).  </p>
  
  <p>For example, if I call the Register first and then the "AddQualification" receive before the "AddProspect" receive, the test app returns with an exception like this:</p>
  
  <blockquote>
  Operation 'AddQualification|{http://tempuri.org/}IZSalesFunnelService' on service instance with identifier '1984c927-402b-4fbb-acd4-edfe4f0d8fa4' cannot be performed at this time. Please ensure that the operations are performed in the correct order and that the binding in use provides ordered delivery guarantees
  </blockquote>
  
  <p>2 things come from this that I don't know how to do:</p>
  
  <p>First, how do I handle the Fault Exception to notify the client in a meaningful way and...</p>
  
  <p>Second, because I'm using persistence (and property promotion), when I make the out of order call, the properties that are promoted unload.  They are not promoted again after the client gets the exception. </p>
  
  <p>Any thoughts?</p>