В настоящее время мы обсуждаем, лучше ли перебрасывать ошибки по каналу WCF, а не передавать сообщение о статусе или ответе службы.
Неисправности поставляются со встроенной поддержкой WCF, где вы можете использовать встроенные обработчики ошибок и соответственно реагировать. Это, однако, несет накладные расходы, поскольку исключение исключений в .NET может быть довольно дорогостоящим.
Сообщения могут содержать необходимую информацию, чтобы определить, что произошло с вашим служебным вызовом, без накладных расходов на выброс исключения. Однако для анализа сообщения требуется несколько строк повторяющегося кода и определения действий после его содержимого.
Мы приняли удар по созданию общего объекта сообщения, который мы могли бы использовать в наших сервисах, и это то, что мы придумали:
public class ReturnItemDTO<T>
{
[DataMember]
public bool Success { get; set; }
[DataMember]
public string ErrorMessage { get; set; }
[DataMember]
public T Item { get; set; }
}
Если все мои вызовы службы возвращают этот элемент, я могу последовательно проверить свойство "Успех", чтобы определить, все ли прошло хорошо. Затем у меня есть строка сообщения об ошибке, указывающая, что что-то пошло не так, и общий элемент, содержащий Dto, если необходимо.
Информация об исключении должна быть отправлена в центральную службу ведения журнала и не будет передана обратно из службы.
Мысли? Комментарии? Идеи? Предложения?
Некоторые дополнительные разъяснения по моему вопросу
Проблема, с которой я столкнулась с контрактами о сбоях, - это деловые правила.
Как, если кто-то входит в систему, и их учетная запись заблокирована, как мне сообщить об этом? Их логин явно терпит неудачу, но он терпит неудачу из-за причины "Учетная запись заблокирована".
Итак, я:
A) использовать логическое, бросить ошибку с заблокированной учетной записью
B) вернуть AuthenticatedDTO с соответствующей информацией