title: NServiceBus Send() vs SendLocal() and exceptions
body: <p>We are implementing a saga that calls out to other services with NServiceBus. I'm not quite clear about how NServiceBus deals with exceptions inside a saga. </p>
  
  <p>Inside the saga we have a handler, and that handler calls an external service that should only be called once the original message handler completes succesfully. Is it okay to do:</p>
  
  <pre><code>public void Handle(IFooMessage message) 
  {
      var message = Bus.CreateInstance&lt;ExternalService.IBarMessage&gt;();
      Bus.Send(message);
  
      // something bad happens here, exception is thrown
  }
  </code></pre>
  
  <p>or will the message be sent to ExternalService multiple times? Someone here has suggested changing it to:</p>
  
  <pre><code>// handler in the saga
  public void Handle(IFooMessage message) 
  {
      // Do something
      var message = Bus.CreateInstance&lt;ISendBarMessage&gt;();
      Bus.SendLocal(message);
  
      // something bad happens, exception is thrown
  }
  
  // a service-level handler
  public void Handle(ISendBarMessage message) 
  {
      var message = Bus.CreateInstance&lt;ExternalService.IBarMessage&gt;();
      Bus.Send(message);
  }
  </code></pre>
  
  <p>I've done an experiment and from what I can tell the first method seems fine, but I can't find any documentation other than <a href="http://docs.particular.net/nservicebus/errors/" rel="nofollow">http://docs.particular.net/nservicebus/errors/</a> which says: </p>
  
  <blockquote>
    <p>When an exception bubbles through to the NServiceBus infrastructure, it rolls back the transaction on a transactional endpoint, causing the message to be returned to the queue, and <strong>any messages that user code tried to send or publish to be undone as well</strong>.</p>
  </blockquote>
  
  <p>Any help to clarify this point would be much appreciated.</p>