Да, это возможно!Я пытаюсь описать это в VB.NET (в основном я использую C #, но надеюсь, что не буду делать синтаксические ошибки).Допустим, у нас есть веб-сервис
<WebMethod()> _
<ScriptMethodAttribute(ResponseFormat:=ResponseFormat.Json, UseHttpGet:=True)> _
Public Function GetData(ByVal Age As Integer) As String
If Age <= 0 Then
Throw(New ArgumentException("The parameter age must be positive."))
End If
'... some code
End Function
Тот же код в C # выглядит как
[WebMethod]
[ScriptMethod (UseHttpGet=true)]
public string GetData(int age)
{
if (age <= 0)
throw new ArgumentException("The parameter age must be positive.");
// some code
}
В случае ввода отрицательного возраста будет выдано исключение ArgumentException
(все, что яобъяснение остается прежним для другого исключения, например SqlException
).
Теперь у вас есть код JavaScript, который использует jQuery.ajax
для вызова службы.Затем вы можете расширить код для поддержки обработки исключений следующим образом:
$.ajax({
type: "GET",
url: "MyWebService.asmx/GetData",
data: {age: -5},
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data, textStatus, xhr) {
// use the data
},
error: function(xhr, textStatus, ex) {
var response = xhr.responseText;
if (response.length > 11 && response.substr(0, 11) === '{"Message":' &&
response.charAt(response.length-1) === '}') {
var exInfo = JSON.parse(response);
var text = "Message=" + exInfo.Message + "\r\n" +
"Exception: " + exInfo.ExceptionType;
// + exInfo.StackTrace;
alert(text);
} else {
alert("error");
}
}
});
В случае возникновения исключения мы получаем информацию об ошибке в формате JSON.Мы десериализовываем его для объекта, имеющего свойства Message
, ExceptionType
и StackTrace
, а затем отображаем сообщение об ошибке, подобное следующему
Message: The parameter age must be positive.
Exception: System.ArgumentException
В реальном приложении вы, вероятно, никогда не отобразите значение StackTrace
имущество.Наиболее важная информация содержится в Message
: текст исключения и в ExceptionType
: название исключения (например, System.ArgumentException
или System.Data.SqlClient.SqlException
).