2014-07-13 51 views
2

我有一個客戶,誰擁有一個Web方法是這樣工作的:自定義錯誤處理的WebMethod返回的XmlDocument

[WebMethod] 
public XmlDocument Send(string stuff) 
{ 
    // ... 
} 

目前,有一類產生的代碼是重新拋出異常,觸發ASP.Net對異常的標準處理。

我們希望對其進行更改,以便webmethod仍然返回狀態代碼500,但是我們提供了一些text/plain診斷信息,而不是默認的ASP.Net。

什麼是適當的方法來做到這一點?

我將它工作,使用Context.Response.End這樣的:

[WebMethod] 
public XmlDocument Send(string stuff) 
{ 
    try 
    { 
     // ...normal processing... 

     return xmlDocument; 
    } 
    catch (RelevantException) 
    { 
     // ...irrelevant cleanup... 

     // Send error 
     Context.Response.StatusCode = 500; 
     Context.Response.Headers.Add("Content-Type", "text/plain"); 
     Context.Response.Write("...diagnostic information here..."); 
     Context.Response.End(); 
     return null; 
    } 
} 

但是,這感覺哈克,所以我希望有一個更好的答案。

回答

2

但是,這感覺哈克,所以我希望有一個更好的答案。

感覺很不好意思,因爲它 hacky。

更好的答案是:返回XML,就像你說的那樣,用任何你想要包含的信息。該服務返回XML,它旨在用於代碼而不是人員消耗。

[WebMethod] 
public XmlDocument Send(string stuff) 
{ 
    try 
    { 
     // ...normal processing, creates xmlDocument... 

     return xmlDocument; 
    } 
    catch (RelevantException) 
    { 
     // ...irrelevant cleanup... 

     // ...error processing, creates xmlDocument... 
     Context.Response.StatusCode = 500; 
     return xmlDocument; 
    } 
}