Как возвращать ошибки из сервисов?
Ещё как вариант - это особый класс возврата, а-ля ASP.NET MVC ActionResut.
Т.е. все методы возвращают некоторый класс Result:class Result<T> {
   public T Result {get; private set; }}
   public bool Success {get; private set; }}
   public IEnumerable<Exception> Errors { get ... }
   public string ErrorMessage {get ... } // этого можно и не делать

   private Result() {}
   public static Result<T> Success(T result) { return new Result() { Result = result, Success = true }; }
   public static Result<T> Fail(Exception ex) { return new Result() { Success = false, Errors = new List<Exception>() { ex }, ErrorMessage = ex.Message }; }
}
Я создаю свое исключение. Если wcf сервис то создаю исключения наследованные от FaultException.