Il codice di errore o di Eccezione - che è la migliore pratica per ASP.Net servizio web?

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

  •  09-06-2019
  •  | 
  •  

Domanda

Ho letto questo thread per WCF ha integrato i codici di Errore Personalizzato e roba del genere.

Ma qual è la migliore pratica per ASP.Net servizi web?Devo buttare eccezioni e lasciare che il cliente gestire l'eccezione o inviare un codice di Errore (buon fine, errore, ecc) che il cliente avrebbe affidamento per eseguire l'elaborazione.

Aggiornamento:Proprio per discutere ulteriormente in caso di SAPONE, diciamo che il cliente effettua un web svc chiamata che dovrebbe essere un messaggio di notifica (nessun valore di ritorno previsto), in modo che tutto vada liscio e senza eccezioni sono lanciati dal svc.

Ora, come sarà il cliente a sapere se la notifica di chiamata persa a causa di una comunicazione o di un problema di rete o qualcosa a metà tra il server e il client?confronta questo con il non avere alcuna eccezione.Client potrebbe supporre che è un successo.Ma non è così.La chiamata persa.

Non inviare un 'successo' codice di errore garantisce al cliente che la chiamata è andato liscio?c'è qualche altro modo per ottenere questo o è lo scenario di cui sopra è anche possibile?

È stato utile?

Soluzione

Jeff Atwood inviato un interessante aerticle su questo argomento qualche tempo fa.Se si seleziona un .NET eccezione viene convertito in un SoapFault, che è compatibile con la maggior parte altri toolkit, le informazioni di colpe che non è molto buona.Perciò, la conlusion dell'articolo è che .NET webservices non buttare molto buona messaggi di eccezione e si dovrebbe aggiungere ulteriori informazioni:

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

Ulteriori informazioni perché soapfaults sono meglio in questa domanda.

Altri suggerimenti

Dipende da come avete intenzione di utilizzare il servizio web - cioèil protocollo che hai intenzione di utilizzare.

Se è di tipo GET o POST, meglio restituire un codice di errore, come la chiama HttpWebRequest (.Net) o altro codice verrà visualizzato errore del server, e hanno a che fare con esso per estrarre il codice di eccezione.

Se è senza SAPONE, allora è perfettamente ok per lanciare eccezioni personalizzate (non desidera restituire all'interno di eccezioni, in quanto potrebbero rivelare qualche traccia dello stack, etc.a soggetti esterni).

Come il SAPONE di servizi web si intende esattamente per guardare al codice chiamante come una normale chiamata al metodo, il corrispondente chiamando il quadro dovrebbe essere in grado di gestire e diffondere l'eccezione proprio bene, rendendo il codice chiamante guardare e comportarsi come si tratta con le chiamate interne.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top