У нас есть веб-сервис ASMX, который мы вызываем из нашего приложения ASP.NET, используя ajax (jQuery).
Типичным примером наших веб-методов будет что-то вроде:
[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 отображает фактическое сообщение об ошибке, которое мы бросаем в новую строку исключения в нашем веб-методе.(В случае примера, приведенного в коде: «Невозможно выполнить действие, такое-то и то-то») НО , когда мы внедряемся в среду этапа и проводим удаленное тестирование;он больше не отображает выдаваемую нами ошибку, а скорее так:
"There has been an error processing your request."
- В Firefox (мы не тестировали больше браузеров) он вообще ничего не отображает, но Firebug показывает ошибку HTTP 500, являющуюсявыброшены.
В заключение мы не обращаемся с этим должным образом, поэтому мои вопросы:
- Каков наилучший способ сообщить об этих ошибках на стороне клиента и иметь согласованное поведение среди всехбраузеры, как при локальном, так и удаленном тестировании?
- Почему IE не работает так же, как Firefox?Конечно, удаленное тестирование в IE тоже не работает, не показывая реальное сообщение об ошибке и не заменяя его на
There has been an error processing your request
, но почему Firefox не делает то же самое? - Учитывая тот факт, что этот веб-сервис также будет использоваться другими веб-приложениями Java в компании, каков наилучший способ обеспечения взаимодействия с этими приложениями?Как мы можем по-прежнему генерировать эти исключения в наших веб-методах, и чтобы приложение Java могло их перехватывать и обрабатывать соответствующим образом?
Одна из альтернатив, которую мы реализовали - пока, мы все еще на стадии разработки - это просто возвращать строку из наших веб-методов при возникновении ошибки, но это действительно уродливый хакерский / неэффективный способ сделатьэтот.
Примечание : Не спрашивайте меня, откуда приходит сообщение «Произошла ошибка при обработке вашего запроса».У меня нет ни малейшего представления.В нашем коде нет ничего, что могло бы вернуть это сообщение.