asp.net - 错误代码或异常 - 哪一个是 ASP.Net Web 服务的最佳实践?

标签 asp.net web-services

我读过这篇文章thread WCF 具有内置的自定义故障代码和内容。

但是 ASP.Net Web 服务的最佳实践是什么?我是否抛出异常并让客户端处理异常或发送客户端将依赖其进行处理的错误代码(成功、失败等)。

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

现在客户端如何知道通知调用是否由于通信/网络问题或服务器和客户端之间的某些问题而丢失?将此与没有抛出任何异常进行比较。客户可能会认为这是成功的。但事实并非如此。调用在某个地方丢失了。

发送“成功”错误代码是否可以确保客户端调用顺利?有没有其他方法可以实现这一点,或者上面的场景是否可能?

最佳答案

杰夫·阿特伍德发布 an interesting aerticle前段时间关于这个话题。尽管 .NET 异常被转换为与大多数其他工具包兼容的 SoapFault,但错误中的信息不是很好。因此,本文的结论是 .NET Web 服务不会抛出非常好的异常消息,您应该添加其他信息:

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

更多信息为什么 SOAP 故障更好in this question .

关于asp.net - 错误代码或异常 - 哪一个是 ASP.Net Web 服务的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/78064/

相关文章:

c# - FindByName 或 FindByValue set .selected on dropdownlist 返回错误 对象引用未设置到对象的实例

asp.net - Web 应用程序必须支持后退按钮吗?

方法变量和包名称之间的 Java 命名冲突

c# - WebService客户端异常: Cannot Import wsdl:binding

java - 浏览器不显示任何 XML 标签树

c# - 将 HTTPS 页面上的 URL 重写为 HTTP

asp.net - 基于用户首选项的LINQ查询

c# - 在 ASP.NET 服务器端验证 Recaptcha 2(无验证码 reCAPTCHA)

wcf - 严格版本化的 WCF 服务命名空间是否应该是契约(Contract)唯一的?

java - 从 JBoss Web 服务访问文件(用于写入)