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