簡體   English   中英

System.ServiceModel.FaultException

[英]System.ServiceModel.FaultException<DefaultFaultContract not catching some exceptions

我有一個具有兩個catch塊的代碼功能。 正在發布以下代碼:

public void UpdateGroup(String strSiteID, String strGroup,  int row)
        {
            try
            {
                Console.WriteLine("UpdateGroup");
                Excel1.MWMClient.MWMServiceProxy.Group group = new Excel1.MWMClient.MWMServiceProxy.Group();
                group.name = "plumber";
                group.description = "he is a plumber";              
                Console.WriteLine(groupClient.UpdateGroup(strSiteID, group));
                ExcelRecorder(0, null, null, row);
            }
            catch (System.ServiceModel.FaultException<DefaultFaultContract> ex)
            {
                ExcelRecorder(ex.Detail.ErrorCode, ex.Detail.Message, ex.Message, row);
            }
            catch (Exception ex)
            {
                ExcelRecorder(0, "", ex.Message, row);
            }
            finally
            {
                System.GC.Collect();
            }
        }

我認為第一個catch塊足以捕獲代碼中可能發生的所有可能的異常。 但是我注意到,有時第一個catch塊沒有捕獲一些一般異常。 這就是為什么我添加了第二個catch塊的原因。 為什么會這樣呢? 為什么我的第一個catch塊不能涵蓋所有異常?

為什么會這樣呢? 為什么我的第一個catch塊不能涵蓋所有異常?

因為默認情況下,當沒有針對特定服務操作定義的任何故障合同時,非通用的FaultException將在服務端引發(並且將在客戶端捕獲)。

Exception類System.ServiceModel.FaultException 只能處理合同規定的Faults

您應該在代碼中使用與以下語句相似的語句

throw new FaultException<DefaultFaultContract>(<parmaters>);

這導致異常由第一個catch塊處理。 如果未按合同規定指定操作錯誤,則將由通用Exception類(第二個catch塊)處理該異常,所有異常類型都將從該異常類派生。

請檢查此頁面上提供的代碼示例。 http://msdn.microsoft.com/en-us/library/ms576199.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM