如何从ASMX Web服务返回错误?(How to Return Errors from an AS

2019-07-30 11:46发布

我的Web服务方法返回一个集合对象,这将很好地连载,由于方式的C#Web服务的工作!

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

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

例如,

正常操作应该返回:

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

但在错误我想

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

Answer 1:

是的,这是可能的。

什么你需要考虑的是的SoapException类 ,具体的详细特性的的SoapException类的。

该的SoapException类将有效地渲染“ SOAP错误 ”,这是从Web服务方法返回的错误信息给客户/消费者的符合标准的机制。

所述的SoapException类的“详细信息”属性的类型的XmlNode的并因此可以包含一个单一的节点/元件或子节点的层次结构。 因此,详细的节点可以很容易地遏制和充当“父母”为自己的自定义错误对象的序列化表示。

从MSDN:

详细属性旨在提供有关SOAP请求的主体元素应用特定错误的详细信息。 根据SOAP规范,如果错误occurrs因为客户端请求无法处理由于SOAP请求的主体元件,所述详细信息属性必须设置。 如果在SOAP请求的头项中出现错误,你必须抛出SoapHeaderException,从而使错误细节在SOAP头返回。 如果没有发生错误,由于身体元素的处理,那么详细属性不能设置。

在构建的详细属性一个XmlNode,DetailElementName的名称和命名空间属性可以被用来确保相合[原文如此]与SOAP规范。

detail元素的所有直接子元素被称为详细条目,并且每个条目的细节被编码为详细信息元素内的独立元件。

需要注意的是,如果你想正确地保持SOAP符合您的web服务响应,你需要返回SoapHeaderException 如果原始XML请求的客户端的标题部分中出现的错误,而不是一个的SoapException(这往往是当案件使用自定义的SOAP头进行例如安全证书),如上所详述。



文章来源: How to Return Errors from an ASMX Web Service?