Обработка ошибок веб-протокола HTTP WCF
Обработка ошибок HTTP в Windows Communication Foundation (WCF) позволяет возвращать ошибки из веб-служб WCF Web HTTP, которые указывают код состояния HTTP и возвращают сведения об ошибке, используя тот же формат, что и операция (например, XML или JSON).
Обработка ошибок веб-протокола HTTP WCF
Класс WebFaultException содержит конструктор, позволяющий указать код состояния HTTP. Затем этот код состояния возвращается клиенту. Общая версия класса WebFaultException, WebFaultException<T> позволяет возвращать определенный пользователем тип, содержащий сведения о возникшей ошибке. Этот пользовательский объект сериализуется с помощью формата, указанного операцией и возвращенного клиенту. Следующий пример показывает, как вернуть код состояния HTTP.
public string Operation1()
{
// Operation logic
// ...
throw new WebFaultException(HttpStatusCode.Forbidden);
}
В следующем примере показано, как вернуть код состояния HTTP и дополнительные сведения в типе, определяемом пользователем. MyErrorDetail
- определяемый пользователем тип, который содержит дополнительные сведения о возникшей ошибке.
public string Operation2()
{
// Operation logic
// ...
MyErrorDetail detail = new MyErrorDetail()
{
Message = "Error Message",
ErrorCode = 123,
}
throw new WebFaultException<MyErrorDetail>(detail, HttpStatusCode.Forbidden);
}
В приведенном выше коде возвращается ответ HTTP с кодом состояния «доступ запрещен» и экземпляром объекта MyErrorDetails
в теле ответа. Формат объекта MyErrorDetails
определяется следующими элементами.
Значение параметра
ResponseFormat
атрибута WebGetAttribute или WebInvokeAttribute, указанного в операции службы.Значение AutomaticFormatSelectionEnabled.
Значение свойства Format при обращении к OutgoingWebResponseContext.
Дополнительные сведения о том, как эти значения влияют на форматирование операции, см. в статье WCF Web HTTP Formatting.
Исключение WebFaultException является FaultException и, следовательно, может быть использовано в качестве модели программирования ошибок для служб, предоставляющих конечные точки SOAP, а также сетевые конечные точки HTTP.