Код ошибки или исключение – что лучше всего подходит для веб-службы ASP.Net?

StackOverflow https://stackoverflow.com/questions/78064

  •  09-06-2019
  •  | 
  •  

Вопрос

Я прочитал это нить поскольку WCF имеет встроенные коды ошибок и прочее.

Но какова наилучшая практика для АСП.Нет веб-сервисы?Выбрасываю ли я исключения и позволяю ли клиенту обрабатывать исключение или отправлять код ошибки (успех, неудача и т. д.), на который клиент будет полагаться при его обработке.

Обновлять:Просто для дальнейшего обсуждения в случае МЫЛО, скажем, клиент делает веб-СВК вызов, который должен быть уведомляющим сообщением (возвращаемого значения не ожидается), поэтому все идет гладко, и svc не создает никаких исключений.

Теперь, как клиент узнает, что вызов уведомления был потерян из-за проблемы со связью/сетью или из-за чего-то между сервером и клиентом?сравните это с отсутствием каких-либо исключений.Клиент может предположить, что это успех.Но это не так.Звонок куда-то затерялся.

Гарантирует ли клиенту отправка кода ошибки «успех» что вызов прошел гладко?Есть ли другой способ добиться этого или возможен ли описанный выше сценарий?

Это было полезно?

Решение

Джефф Этвуд опубликовал интересная статья об этой теме некоторое время назад.Хотя исключение .NET преобразуется в SoapFault, совместимое с большинством других наборов инструментов, информация в ошибках не очень хорошая.Таким образом, вывод статьи заключается в том, что веб-службы .NET не выдают очень хорошие сообщения об исключениях, и вам следует добавить дополнительную информацию:

Private Sub WebServiceExceptionHandler(ByVal ex As Exception)
    Dim ueh As New AspUnhandledExceptionHandler
    ueh.HandleException(ex)

    '-- Build the detail element of the SOAP fault.
    Dim doc As New System.Xml.XmlDocument
    Dim node As System.Xml.XmlNode = doc.CreateNode(XmlNodeType.Element, _
        SoapException.DetailElementName.Name, _
        SoapException.DetailElementName.Namespace)

    '-- append our error detail string to the SOAP detail element
    Dim details As System.Xml.XmlNode = doc.CreateNode(XmlNodeType.Element, _
        "ExceptionInfo", _
        SoapException.DetailElementName.Namespace)
    details.InnerText = ueh.ExceptionToString(ex)
    node.AppendChild(details)

    '-- re-throw the exception so we can package additional info
    Throw New SoapException("Unhandled Exception: " & ex.Message, _
        SoapException.ClientFaultCode, _
        Context.Request.Url.ToString, node)
End Sub

Дополнительная информация, почему мыльные дефекты лучше в этом вопросе.

Другие советы

Зависит от того, как вы собираетесь использовать веб-сервис, т.е.какой протокол вы собираетесь использовать.

Если это GET или POST, лучше возвращать код ошибки, так как вызывающий HttpWebRequest (.Net) или другой код получит ошибку сервера и должен будет справиться с ней, чтобы извлечь код исключения.

Если это SOAP, то вполне нормально генерировать пользовательские исключения (вы не хотите возвращать внутренние исключения платформы, поскольку они могут выявить некоторую трассировку стека и т. д.).внешним сторонам).

Поскольку веб-службы SOAP предназначены именно для того, чтобы рассматривать вызывающий код как обычный вызов метода, соответствующая структура вызова должна иметь возможность нормально обрабатывать и распространять исключение, таким образом заставляя вызывающий код выглядеть и вести себя так же, как он имеет дело с внутренними вызовами. .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top