[英]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.