2010-02-26 37 views
3

我有用C#編寫的webservice。當服務器發生錯誤時,我想通知用戶客戶端。這通過拋出異常服務器端正常工作,然後發送到我的錯誤處理程序客戶端。C#Webservice:在JSON中拋出帶有額外屬性的異常

但是,當我拋出異常時,我想要設置一個屬性來描述我認爲錯誤在這一點上有多嚴重。因此,我可以決定客戶端如何顯示錯誤:

WebService.Method(some_value, handle_response, handle_error); 

function handle_response (response) { 
    //Do something... 
} 

function handle_error (error) { 
    if(error.level === 'Critical') { 
     //Show critical message. 
    } else if(error.level === 'Warning') { 
     //Show warning message. 
    } else 
     ... 
    } 
} 

我的解決方案迄今已創建一個自定義的異常從System.Exception繼承。 我的webservice以JSON格式化結果返回。

我的問題是如何讓我的財產通過客戶端JSON響應?

回答

3

Web服務:

 public Response zzz() 
     { 
      Response result; 
      try 
     { 
     ... 
     } 
     catch(MyException) 
     { 
      result.HasError = true; 
      result.Error.Level = Normal; 
      result.Error.Message = "It's OK."; 
     } 
     catch(Exception) 
     { 
result.HasError = true; 
      result.Error.Level = Critical; 
      result.Error.Message = "!!!!"; 
     } 
     } 

然後檢查Response.HasError

+0

我以前用過類似的東西,但這次我想錯誤處理要經過ASP.NET Web服務的錯誤處理 - 見我的編輯。 – Chau 2010-02-26 12:58:44

+0

你使用WCF或古典(舊式)web服務? WCF有一個地方可以處理所有的異常(每種方法都沒有try/catch)。 – garik 2010-02-26 13:54:58

+1

我想,這是使用「屏蔽異常」模式的最佳選擇(方式),而不是向客戶端顯示內部異常(真正的異常)。這是一個安全問題。服務器應處理異常並將用戶友好的消息返回給客戶端 – garik 2010-02-26 14:05:34