Мы вызываем веб-сервис Asp.Net ajax на стороне клиента. Итак, у функций JavaScript есть такие вызовы, как:
// Функция для изменения объекта состояния на стороне сервера и установки выбранного узла для дерева вариантов.
function JSMethod(caseId, url)
{
Sample.XYZ.Method(param1, param2, OnMethodReturn);
}
function OnMethodReturn(result)
{
var sessionExpiry = CheckForSessionExpiry(result);
var error = CheckForErrors(result);
... process result
}
А на стороне сервера в файле ".asmx.cs": образец пространства имен
[ScriptService]
class XYZ : WebService
{
[WebMethod(EnableSession = true)]
public string Method(string param1, string param2)
{
if (SessionExpired())
{
return sessionExpiredMessage;
}
.
.
.
}
}
Веб-сайт настроен на использование аутентификации на основе форм. Теперь, если сеанс истек, а затем вызывается функция JavaScript "JSMethod", то получается следующая ошибка: Ошибка выполнения Microsoft JScript: Sys.Net.WebServiceFailedException: серверный метод Method завершился ошибкой со следующей ошибкой: System.InvalidOperationException - Ошибка аутентификации.
Это исключение вызывается методом "function Sys $ Net $ WebServiceProxy $ invoke" в файле "ScriptResource.axd":
function Sys$Net$WebServiceProxy$invoke
{
.
.
.
{
// In debug mode, if no error was registered, display some trace information
var error;
if (result && errorObj) {
// If we got a result, we're likely dealing with an error in the method itself
error = result.get_exceptionType() + "-- " + result.get_message();
}
else {
// Otherwise, it's probably a 'top-level' error, in which case we dump the
// whole response in the trace
error = response.get_responseData();
}
// DevDiv 89485: throw, not alert()
throw Sys.Net.WebServiceProxy._createFailedError(methodName, String.format(Sys.Res.webServiceFailed, methodName, error));
}
Таким образом, проблема в том, что исключение возникает еще до того, как вызывается «Метод», исключение возникает во время создания веб-прокси. Любые идеи о том, как решить эту проблему



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


У вас есть метод обратного вызова (OnMethodReturn), указанный в вызове WebMethod, но не метод обработчика ошибок. Вам нужно создать его и передать в метод обратного вызова. Затем вы можете обрабатывать свои неудавшиеся вызовы WebMethod там.
Эта проблема возникает еще до того, как платформа Ajax может вызвать целевой метод, она не работает при создании веб-прокси. В любом случае я решил проблему, включив анонимный доступ к папке веб-службы и явно проверив сеанс в методах веб-службы.
Почему бы не использовать try { } catch { } для вызова JS-метода?
попробуйте этот ... используйте "статический"
[WebMethod(EnableSession = true)]
public static string Method(string param1, string param2)