2010-06-01 8 views
1

我有一組Web服務(服務器)和一個消耗此(客戶端)的應用程序。在這種關係中,如果服務器總是拋出異常(即在throw塊中,重新拋出捕獲的異常),並且客戶端會捕獲這個異常。服務器可以處理的異常,它將處理而不是重新拋出,但其他所有內容都將被拋出到調用層進行進一步的操作(消費應用程序可以引發一個味精盒或其他)。在客戶端 - 服務器關係中,服務器是否應始終將異常重新拋出到客戶端?

這是一個很好的例子,可以處理:文件不能被寫入,因爲該目錄需要特殊權限,所以如果這引發了一個異常,該文件被寫入某處不需要管理員權限。

感謝

回答

0

有多種類型的錯誤。

  • 對於客戶端可以糾正並重試的錯誤,請向他們提供有關糾正內容的說明。
  • 對於其他錯誤,如果重試不會發生任何變化,例如未經授權的操作,請讓用戶知道他們爲什麼不能執行該操作,以及是否有任何操作可以更改此事。
  • 如您所說,如果客戶端發出更新記錄的請求,並且服務器上出現了客戶端控制之外的事件,但服務器可以恢復,則不通知客戶端。如果您需要知道,請讓服務器通知您。
  • 如果服務器發生錯誤,但服務器無法恢復,您肯定需要通知客戶端失敗並通知您,或稍後再試。系統應該再次通知您。
0

這個特別的錯誤,如在服務器上配置問題的聲音,所以客戶端沒有任何行動的手段,不應該被考慮到的信息。

我通常會在通用錯誤消息(「系統錯誤,請與您的系統管理員聯繫」)下覆蓋該類錯誤並將錯誤記錄在服務器上(以備後續檢查)。

+0

如果客戶端將路徑作爲參數提供,則客戶端具有操作方法。否則,我完全同意。最好的選擇是寫信給最可靠的地方(隔離存儲?),所以我猜你已經非常有用了。 – dotnetdev 2010-06-01 22:12:14

+0

同意客戶提供路徑的情況。 – 2010-06-01 22:27:37