繁体   English   中英

如何从ASMX Web服务返回错误?

[英]How to Return Errors from an ASMX Web Service?

我的Web服务方法返回一个集合对象,这将很好地序列化,这要归功于C#web服务的工作方式!

但是,如果我的代码抛出未捕获的异常,我想返回一个自定义错误对象。

这可能是使用C#ASP.NET v2吗?

例如,

正常操作应返回:

<Books>
    <book>Sample</book>
    <book>Sample</book>
</Books>

但是我想要的错误

  <error>
      <errorMessage></errorMessage>
  </error>

是的,这是可能的。

您需要了解的是SoapException类 ,特别是SoapException类Detail属性

SoapException类将有效地呈现“ Soap Fault ”,这是一种符合标准的机制,用于从Web服务方法向客户端/使用者返回错误信息。

SoapException类的“Detail”属性是XmlNode类型,因此可以包含单个节点/元素或子节点的层次结构。 因此,Detail节点可以轻松地包含并充当您自己的自定义错误对象的序列化表示的“父”。

来自MSDN:

Detail属性用于提供与SOAP请求的Body元素相关的特定于应用程序的错误详细信息。 根据SOAP规范,如果由于SOAP请求的Body元素而无法处理客户端请求而发生错误,则必须设置Detail属性。 如果SOAP请求的标头条目中发生错误,则必须抛出SoapHeaderException,以便在SOAP标头中返回错误详细信息。 如果由于处理Body元素而未发生错误,则不得设置Detail属性。

在为Detail属性构建XmlNode时,DetailElementName的Name和Namespace属性可用于确保与SOAP规范的一致性[sic]。

detail元素的所有直接子元素都称为detail条目,每个detail条目都被编码为detail元素中的独立元素。

请注意,如果您希望保持与Web服务响应的SOAP兼容,那么如果错误发生在原始XML请求的客户端头部分中,则需要返回SoapHeaderException而不是SoapException(这通常是这种情况。如上所述,使用自定义SOAP标头作为安全凭证。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM