Зачем нам нужны контракты на отказ в WCF
Грязные руки у меня в WCF. Теперь один из вопросов, который мне приходит в голову, касается Fault Contracts в WCF.
Я хотел бы знать, зачем нам это нужно. Рассмотрим пример приложения, в котором я добавляю 2 номера.
Так что в ответе у меня как 2 поля
Результат - Успех / Ошибка
Ошибка - Сведения об ошибке (код + текст)
Теперь, если у моей службы WCF есть какое-либо исключение, я могу перехватить его в блоке catch и присвоить значения объекту Response.
Результат - Успех / Ошибка
Ошибка - Сведения об ошибке (код + текст)
Так, где Fault Contract входит в картину?
2 ответа
Что вы делаете в своем примере, так это то, что вы указываете вызывающей стороне, что произошла ошибка через "код возврата". Контракты о сбоях представляют собой другой подход к этому: исключения.
Есть много причин, почему исключения считаются лучше, чем коды возврата. Прочитайте, например, это: какие и почему вы предпочитаете исключения или коды возврата?, Вот почему архитекторы WCF решили предоставить механизм Fault Contract, а не реализовывать те же функции с помощью кодов возврата.
В вашем случае подход Fault Contract потребует, чтобы вы не возвращали объект ответа. Вы должны просто вернуть int. Если случится что-то исключительное, что не позволит вам вернуть int, ваш код выдаст строго типизированный Fault, указывающий вызывающей стороне, что пошло не так и как, возможно, преодолеть его.
Это старый вопрос, но я все еще хочу опубликовать некоторые ответы для будущих читателей.
Нашел этот сайт http://www.c-sharpcorner.com/UploadFile/aravindbenator/wcf-exception-handling-best-ways/.
Автор сказал, что если мы не используем Fault Contract, данные ответа (от сервиса к клиенту) будут включать некоторые конфиденциальные данные.
Если у нас нет Fault Contract, в WCF app.config или web.config, и мы по-прежнему хотим исключений Fault или Web Fault Exception, мы установим следующее:<serviceDebug includeExceptionDetailInFaults="true" />
Однако, если мы установим <serviceDebug includeExceptionDetailInFaults="false" />
, мы должны иметь договор о неисправности выше сервисных операций.