3
我們有一個ASMX web服務,我們使用ajax(jQuery)從我們的ASP.NET應用程序中調用該服務。最佳實踐 - 拋出Web服務的異常
從我們的方法一個典型的例子是這樣的:
[WebMethod]
public void DoSomething(BusinessObject myParameter)
{
try
{
BL.DoSomethingWithParam(myParameter);
}
catch(Exception ex)
{
//logic to log the actual exception goes here
//and then we throw a more user-friendly error as so:
throw new Exception("Unable to perform action such an such");
}
}
在客戶端,我們將有這樣的事情:
$.ajax({
type: "POST",
url: "WebService.asmx/DoSomething",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(result) {
//do something with result.d
},
error: function(xhr, ajaxOptions, thrownError){
alert($.parseJSON(xhr.Response.Text).Message);
}
});
有幾個問題與上面的方法,我想修復:
- 當我們在我們的盒子上本地測試我們的應用程序時,Internet Explorer顯示實際的錯誤消息,我們扔在我們的Web方法拋出新的異常行(在提供示例代碼的情況下:「無法執行這樣和那樣的動作」)但是當我們部署到舞臺環境和遠程測試;它不再顯示我們拋出的錯誤,而是這個:
"There has been an error processing your request."
- 在Firefox上(我們沒有測試更多的瀏覽器),它根本沒有顯示任何東西,但是Firebug顯示了一個HTTP 500錯誤被拋出。
總之,我們不妥善處理這一點,所以我的問題是:
- 什麼是這些錯誤傳達給客戶端,並具有一致的行爲在所有的瀏覽器,無論是,測試時的最佳方式本地和遠程?
- 爲什麼IE瀏覽器不像Firefox那樣打破?當然,通過不顯示真正的錯誤信息並將其替換爲通用的
There has been an error processing your request
,但是爲什麼Firefox不這樣做呢? - 考慮到這個Web服務也將被公司內部的其他Java Web應用程序佔用,維護與這些應用程序的互操作性的最佳方式是什麼?我們仍然可以如何將這些異常拋出到我們的Web方法上,並讓Java應用程序能夠捕獲並正確處理它們?我們現在實施的 - 因爲
一個選擇,我們仍然在發展相位時發生錯誤,但是這確實是一個醜陋的黑客攻擊/不雅的方式這樣做只是爲了回報從我們的網站方法的字符串。
注意:不要問我「處理您的請求時出錯了」消息來自哪裏。我沒有最微不足道的想法。我們的代碼中沒有任何內容會返回該消息。
感謝您的提示。的確非常有用! – Icarus