2011-10-01 52 views
-1

我有我自己的wcf服務類,它應該返回帶有「Everything Save Sac Sacfully」的字符串,如果ok保存數據。否則,我需要返回此字符串異常。捕獲錯誤並返回方法結果

string SaveData(Stream stream) 
{ 
    string error = ""; 
    try 
    { 

    //do saving data 
    error+="Everything Save Saccefully"; 
    return error; 
    } 
    catch(Exception ex) 
    { 
    throw ex; 
    } 
    finally 
    { 
    } 
} 

在try塊中發生錯誤並將其返回給錯誤變量是可能的?

回答

1

通常情況下,我會做由Jon的建議,但如果你真的不想讓任何例外冒泡從你的服務,你可以封裝你的成功和(任意)在一類結構類似這樣的

public class ErrorInfo 
{ 
    public string Message {get; set;} 

    // TODO: Maybe add in other information about the error? 
} 

public class SaveResult 
{ 
    public bool Success { get; set; } 

    /// <summary> 
    /// Set to contain error information if Success = false 
    /// </summary> 
    public ErrorInfo ErrorInfo { get; set; } 
} 

然後失敗錯誤信息......

public SaveResult SaveData(Stream stream) 
{ 
    SaveResult saveResult = new SaveResult(); 

    string error = ""; 
    try 
    { 
     //do saving data 
     saveResult.Success = true; 
    } 
    catch (Exception ex) 
    { 
     saveResult.ErrorInfo = new ErrorInfo { Message = ex.Message }; 
    } 
} 

這種方法的缺點是您的呼叫者必須在致電SaveData後檢查Success值。不這樣做可能會導致代碼中的錯誤,只有在保存失敗時纔會出現。如果調用者忘記顯式處理任何異常,那麼它會冒泡調用堆棧並使應用程序崩潰,或者使應用程序崩潰,或者使應用程序崩潰被更高級別的錯誤處理代碼所捕獲。

不一定是理想的,但總體上比你的代碼更好地默認假設某事成功了,而事實上它並沒有成功。

2

那麼,您表達錯誤的傳統方式是只需通過一個異常 - 而不是返回值。缺乏例外應該意味着「一切正常」。這是正常的工作習慣。

現在,有時候值得使用一種方法,其中不會拋出異常,而是通過out參數返回成功狀態並可能返回單獨的結果。但是這種情況相對較少 - 通常用於解析等情況,當輸入數據以外沒有任何真正的錯誤時,以難以預測的方式失敗是完全正常的。

在你的情況,它看起來像這應該是一個void方法,它只是拋出一個異常的錯誤。

1

試試這個:

string SaveData(Stream stream) 
{ 
    string error; 
    try 
    { 
    //do saving data 
    error ="Everything saved Successfully"; 
    } 
    catch(Exception ex) 
    { 
    error = ex.Message; 
    } 
return error; 

} 
+0

什麼是最後的塊點? – Baz1nga

+0

@ Baz1nga:對不起,沒有得到你。 –

+0

爲什麼麻煩設置'error =「」',然後'+ ='成功/異常消息? –

1

您應該在WCF中使用Faults獲得優異的結果。我看不出爲什麼你需要字符串中的異常。但是,如果你絕對需要這個,只需將return語句移到最後並在catch塊中設置它的值即可。

string SaveData(Stream stream) 
{ 
    string error = ""; 
    try 
    { 

    //do saving data 
    error+="Everything Save Saccefully"; 
    } 
    catch(Exception ex) 
    { 
    //throw ex; Do not throw, just return its string representation 
    error+=ex.ToString(); 
    } 
    finally 
    { 
    } 
    return error; 
} 
相關問題