我正在使用消費WCF服務的客戶端。在各種情況下,服務只是通過相關的消息引發FaultException,通知給出的故障背後的原因。處理WCF故障
這些錯誤中有一些是我們的客戶端應用程序可以處理的東西,但是我只是在FaultExceptions消息或Reason中執行一些字符串匹配而不是猶豫,以確定它是否可以滿足我們的要求。
我希望FaultException上的FaultCode可以用來識別我們可以處理的特定類型的Fault,但看起來這純粹是爲了識別一些SOAP錯誤。如果我對此的解釋不正確,請糾正我。
我知道它可能會引發FaultException,但我認爲期望爲出現故障後的每個原因創建新類型是不現實的。
你如何處理這種情況。作爲一個人爲的例子。考慮提供以下方法的服務;
RecordDetails GetRecordById(string id)
void Add(RecordDetails record)
void Update(RecordDetailsUpdateRequest rdur)
現在,在上面的例子,如果你調用GetRecordById與不存在的ID,您收到的FaultException與說明消息「記錄無法找到」。同樣,如果您爲已存在的記錄調用Add或爲不存在的記錄調用Update,則只需通過Message/Reason詳細說明失敗原因即可獲得FaultException。我需要知道是否存在記錄,以確定是否應更新或插入。正如我所提到的,由於我無法控制它們是否會保持不變,所以我很猶豫是否僅僅匹配字符串。
在這種情況下(與FaultException有關的類型詳述了RecordNotFoundException等)或與FaultException相關的一些泛型類型會定義與錯誤相關的特定細節,您會期望什麼呢?例如,帶有成員代碼的RecordOperationExcpetion類(失敗原因的常量或枚舉標識符)以及用戶友好的消息。
至少這樣,我可以識別錯誤原因而不必求助於字符串匹配。
您的想法值得讚賞。
這當然是我的直覺,但我只是熱衷於找出更有經驗的從業者在過去所做的那樣(這仍然是相當新的給我)。不幸的是,我無法控制服務中的功能。但是,如果我可以提供一些很好的例子,說明爲什麼它應該以特定的方式完成,那麼它將有希望讓我們所有的生活變得更容易。感謝您的輸入:) –
@Mr Moose - 我自己並不是專家,但就我所知,上述FaultContracts是最佳實踐。以下是一些可能爲您進一步闡述的鏈接:[指定和處理合同和服務中的錯誤](http://msdn.microsoft.com/zh-cn/library/ms733721.aspx),[WCF中的異常處理故障合同](http://www.c-sharpcorner.com/UploadFile/ankithakur/ExceptionHandlingWCF12282007072617AM/ExceptionHandlingWCF.aspx),[Fault Contract](http://www.wcftutorial.net/Fault-Contract.aspx)。 – Tim