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

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

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

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

例如,

正常操作应返回:

 Sample Sample  

但是我想要的错误

     

是的,这是可能的。

您需要了解的是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标头 (例如安全凭证)。