2013-10-25 51 views
0

我有一個WCF服務,我有一個FaultContract。我在FaultContract中有一個原因,所以我有這樣的事情。WCF服務FaultContract瞭解

FltInfo.Reason = "This is a test"; 
throw new FaultException<FaultInfo>(FltInfo, new FaultReason(FltInfo.Reason)); 

顯然,您會看到我的數據合同中定義了FaultInfo類。但是,如果我想獲得故障代碼,詳細信息或級別(關鍵類型)方面的信息,我需要做什麼或如何執行?

如果我沒有包括這些,我仍然會收到肥皂故障信息?

此外,TRY-CATCH(或你有什麼)的faultexception觸發不會終止發送/接收方面的通信嗎?這意味着如果我有1條消息通過接收,並且1條消息有100個條目(例如數組)的列表,如果我通過100的數組進行處理,我可以讓我們說第30條,但它觸發錯誤。我會不會失去一切(全部100),因爲答覆從來沒有完成,只有一個錯誤?

謝謝

回答

1

您可以添加故障代碼,使用故障異常的各種構造函數。是的,如果您將它們留空,您將獲得WCF默認值。另外還有一點是正確的,如果在處理列表中的單個項目時拋出異常異常,則將跳出正常路徑並僅返回錯誤。

您可以通過在錯誤的一部分中包含您的響應類型以及如何將單個部分標記爲無效來修改此內容。或者你的服務可以有一個包裝器響應類型,它允許你標記返回的數據的特定部分是無效的,因爲在你的解決方案中這樣做是無效的。

+0

我決定我正在處理與錯誤或異常相關的錯誤數據,比方說。我有更多的關鍵系統項目拋出了錯誤的合同。雖然,取決於系統,它可能不會提供該錯誤合同。 (例如網絡問題,溝通問題等)。這聽起來像是一個適當的機智? – user2887486

+0

聽起來很像我在生產系統中處理它們的方式。主要關鍵問題引發錯誤,錯誤響應從數據/狀態錯誤返回。我認爲你的選擇聽起來適合我。 – joshholl