Разработчик службы WCF может столкнуться с некоторыми непредвиденными ошибками, которые требуют сообщения клиенту подходящим способом. Такие ошибки, известные как исключения , обычно обрабатываются с помощью блоков try / catch, но, опять же, это зависит от конкретной технологии.
Поскольку проблемная область клиента связана не с тем, как произошла ошибка, или с факторами, способствующими ошибке, контракт отказа от SOAP используется для передачи сообщения об ошибке из сервиса клиенту в WCF.
Контракт отказа позволяет клиенту иметь документированное представление ошибок, произошедших в службе. Следующий пример дает лучшее понимание.
Шаг 1 — Создан простой сервис калькулятора с операцией деления, которая генерирует общие исключения.
using System; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Runtime.Serialization; usingSystem.ServiceModel; usingSystem.Text; namespace Calculator { // NOTE: You can use the "Rename" command on the "Refactor" menu to change // the interface name "IService1" in both code and config file together. [ServiceContract] public interface IService1 { [OperationContract] int divide(int num1, int num2); // TODO: Add your service operations here } }
Кодировка для файла класса показана ниже —
Теперь, когда мы попытаемся разделить число 10 на ноль, служба калькулятора выдаст исключение.
Исключение может быть обработано блоком try / catch.
Теперь, когда мы попытаемся разделить любое целое число на 0, оно вернет значение 10, потому что мы обработали его в блоке catch.
Шаг 2 — FaultException используется на этом шаге для передачи информации об исключении клиенту из службы.
public int Divide(int num1, int num2) { //Do something throw new FaultException("Error while dividing number"); }
Шаг 3 — Можно также создать пользовательский тип для отправки сообщения об ошибке с помощью FaultContract. Шаги, необходимые для создания пользовательского типа, упомянуты ниже —
Тип определяется использованием контракта данных и указываются поля, предназначенные для получения.
Сервисная операция оформлена атрибутом FaultContract. Имя типа также указано.
Экземпляр службы создается для создания исключений, и назначаются настраиваемые свойства исключений.