错误代码或异常-哪种是ASP.NETWeb服务的最佳实践?

错误代码或异常-哪种是ASP.NETWeb服务的最佳实践?,asp.net,web-services,Asp.net,Web Services,我读过这篇文章,因为WCF内置了自定义故障代码等 但是ASP.NETWeb服务的最佳实践是什么?我是否抛出异常并让客户机处理异常,或者发送一个错误代码(成功、失败等),客户机将依靠该代码进行处理 更新:为了进一步讨论SOAP的情况,假设客户机进行一个web svc调用,该调用应该是一条通知消息(不需要返回值),因此一切都很顺利,svc不会抛出任何异常 现在,客户机如何知道通知调用是否由于通信/网络问题或服务器与客户机之间的某些问题而丢失?将此与未引发任何异常进行比较。客户可能会认为这是成功的。但

我读过这篇文章,因为WCF内置了自定义故障代码等

但是ASP.NETWeb服务的最佳实践是什么?我是否抛出异常并让客户机处理异常,或者发送一个错误代码(成功、失败等),客户机将依靠该代码进行处理

更新:为了进一步讨论SOAP的情况,假设客户机进行一个web svc调用,该调用应该是一条通知消息(不需要返回值),因此一切都很顺利,svc不会抛出任何异常

现在,客户机如何知道通知调用是否由于通信/网络问题或服务器与客户机之间的某些问题而丢失?将此与未引发任何异常进行比较。客户可能会认为这是成功的。但事实并非如此。电话在某处丢失了


发送“成功”错误代码是否能确保呼叫顺利进行?是否有其他方法来实现这一点,或者上述场景是否可能?

取决于您将如何使用web服务,即您将使用哪种协议

如果是GET或POST,最好返回错误代码,因为调用HttpWebRequest(.Net)或其他代码将接收到服务器错误,并且必须对其进行处理以提取异常代码

如果是SOAP,那么抛出自定义异常是完全可以的(您不希望返回内部框架异常,因为它们可能会向外部方显示一些堆栈跟踪等)

由于SOAP web服务将调用代码视为普通的方法调用,因此相应的调用框架应该能够很好地处理和传播异常,从而使调用代码的外观和行为与处理内部调用一样。

Jeff Atwood不久前就发布了有关此主题的文章。尽管.NET异常被转换为SoapFault,它与大多数其他工具包兼容,但故障中的信息不是很好。因此,本文的结论是.NET webservices不会抛出非常好的异常消息,您应该添加其他信息:

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

更多信息为什么soapfaults更好。

我真的很想知道为什么这被否决了?这完全相关。