我的Web服务方法返回一个集合对象,这将很好地连载,由于方式的C#Web服务的工作!
但是,如果我的代码抛出一个未捕获的异常,我想,而不是返回一个自定义错误对象。
这可能使用C#ASP.NET v2的?
例如,
正常操作应该返回:
<Books>
<book>Sample</book>
<book>Sample</book>
</Books>
但在错误我想
<error>
<errorMessage></errorMessage>
</error>
是的,这是可能的。
什么你需要考虑的是的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头进行例如安全证书),如上所详述。