protected abstract void doWork(Message message);
 private void audit(Message message, IPrincipal principal)
 {
     _auditor.Audit(messageType, principal.Identity.Name, message.CorrelationId, message.Body.ToString());
 }
 protected abstract bool authorize(Message message,  IPrincipal principal);