Зачем нам нужны контракты на отказ в 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" />, мы должны иметь договор о неисправности выше сервисных операций.

Другие вопросы по тегам