В настоящее время мы ведем дискуссию о том, лучше ли перебрасывать ошибки по каналу 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 с соответствующей информацией