Código de error o excepción: ¿cuál es la mejor práctica para un servicio web ASP.Net?

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

  •  09-06-2019
  •  | 
  •  

Pregunta

He leído esto hilo para WCF tiene códigos de error personalizados incorporados y demás.

Pero ¿cuál es la mejor práctica para ASP.Net ¿servicios web?¿Lanzo excepciones y dejo que el cliente maneje la excepción o envío un código de error (éxito, fracaso, etc.) en el que el cliente confiaría para realizar su procesamiento?

Actualizar:Sólo para discutir más en caso de JABÓN, digamos que el cliente hace un servicio web call, que se supone que es un mensaje de notificación (no se espera ningún valor de retorno), para que todo vaya bien y el servicio no genere excepciones.

Ahora, ¿cómo sabrá el cliente si la llamada de notificación se perdió debido a un problema de comunicación/red o algo entre el servidor y el cliente?compare esto con no tener ninguna excepción.El cliente podría asumir que es un éxito.Pero no lo es.La llamada se perdió en alguna parte.

¿El envío de un código de error de "éxito" garantiza al cliente que la llamada se realizó sin problemas?¿Hay alguna otra manera de lograr esto o es incluso posible el escenario anterior?

¿Fue útil?

Solución

Jeff Atwood publicado un articulo interesante sobre este tema hace algún tiempo.Aunque una excepción .NET se convierte en SoapFault, que es compatible con la mayoría de los demás kits de herramientas, la información contenida en las fallas no es muy buena.Por lo tanto, la conclusión del artículo es que los servicios web .NET no arrojan muy buenos mensajes de excepción y se debe agregar información adicional:

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

Más información por qué las fallas de jabón son mejores en esta pregunta.

Otros consejos

Depende de cómo vaya a consumir el servicio web, es decir,¿Qué protocolo vas a utilizar?

Si es GET o POST, es mejor devolver el código de error, ya que la llamada HttpWebRequest (.Net) u otro código recibirá un error del servidor y tendrá que lidiar con él para extraer el código de excepción.

Si es SOAP, entonces está perfectamente bien lanzar excepciones personalizadas (no desea devolver excepciones del marco interno, ya que pueden revelar algún seguimiento de la pila, etc.a terceros).

Como los servicios web SOAP están destinados exactamente a considerar el código de llamada como una llamada a un método normal, el marco de llamada correspondiente debería poder manejar y propagar la excepción sin problemas, haciendo que el código de llamada se vea y se comporte como si tratara con llamadas internas. .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top