Учебники

WCF — обработка исключений

Разработчик службы 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
   }
}

Кодировка для файла класса показана ниже —

Wcf Exception Handling 2

Теперь, когда мы попытаемся разделить число 10 на ноль, служба калькулятора выдаст исключение.

Wcf Исключительная обработка 3

Wcf Исключительная обработка 4

Исключение может быть обработано блоком try / catch.

Wcf Exception Handling 5

Теперь, когда мы попытаемся разделить любое целое число на 0, оно вернет значение 10, потому что мы обработали его в блоке catch.

Wcf Исключение 6

Шаг 2 — FaultException используется на этом шаге для передачи информации об исключении клиенту из службы.

public int Divide(int num1, int num2) { 
   //Do something 
   throw new FaultException("Error while dividing number"); 
}

Wcf Exception Handling 7

Шаг 3 — Можно также создать пользовательский тип для отправки сообщения об ошибке с помощью FaultContract. Шаги, необходимые для создания пользовательского типа, упомянуты ниже —

Тип определяется использованием контракта данных и указываются поля, предназначенные для получения.

Сервисная операция оформлена атрибутом FaultContract. Имя типа также указано.

Экземпляр службы создается для создания исключений, и назначаются настраиваемые свойства исключений.