2013-08-28 83 views
0

我正面臨與WCF服務中的異常處理相關的問題。請任何人都可以幫助我。在WCF服務中處理在DLL中生成的異常

我的問題: -

我有我的移動應用開發WCF服務。在我的WCF服務中,我有一個類庫項目,其中有一個類A.在那個類中,我定義了一個方法,它從webconfig文件的appsetting塊(對於用戶ID)獲得一些值。

如果我忘了在webconfig中定義該設置,那麼異常將在該方法的try catch塊中出現(這一切都很好)但理想情況下,該異常也應該放入相應WCF服務方法的catch塊我在那裏調用這個A類方法。

這件事情不在我的情況。我提供以下 代碼做參考

寫在ClassA的

代碼(在類庫項目配售)

public static string Method() 
{ 
    try 
    { 
     string strdata = ConfigurationManager.AppSettings["UserID"].ToString(); 
     return strdata; 
    } 
    catch (Exception e1) 
    { 
     throw e1; 
    } 
} 

代碼寫在WCF服務: -

try 
{ 
    ClassA.Method(); 
} 
catch (Exception e2) 
{ 

} 

在上面的代碼,如果我忘了要在webconfig文件中定義用戶標識設置,那麼異常也應該放入WCF服務方法的catch塊中,但不會發生。

回答

0

我不確定它爲什麼沒有顯示在WCF代碼中,但是通過使用throw e1您正在丟失錯誤的堆棧跟蹤,這通常被認爲是一件壞事。

說實話,我認爲你在這裏使用try-catch塊的原因是錯誤的。你可以很容易地檢查返回的值,看看它是否爲空或沒有所有的try catch代碼。 ConfigurationManager.AppSettings返回一個字符串 - 調用.ToString()它是redudant(儘管如果該項目不存在,你會得到一個空引用異常)。

我會這樣重寫代碼:

public static string Method() 
{ 

    return ConfigurationManager.AppSettings["UserID"]; 
} 

,然後在WCF代碼:

string userID = ClassA.Method(); 

if (String.IsNullOrEmpty(userID)) 
{ 
    // Do something with the error here 
} 
+0

感謝蒂姆。我會試試這看起來很好。 – VSoni