Как исправить: InvalidOperationException при тайм-ауте сеанса в вызове Ajax WebService

Мы вызываем веб-сервис 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));
}

Таким образом, проблема в том, что исключение возникает еще до того, как вызывается «Метод», исключение возникает во время создания веб-прокси. Любые идеи о том, как решить эту проблему

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
4 109
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

У вас есть метод обратного вызова (OnMethodReturn), указанный в вызове WebMethod, но не метод обработчика ошибок. Вам нужно создать его и передать в метод обратного вызова. Затем вы можете обрабатывать свои неудавшиеся вызовы WebMethod там.

Эта проблема возникает еще до того, как платформа Ajax может вызвать целевой метод, она не работает при создании веб-прокси. В любом случае я решил проблему, включив анонимный доступ к папке веб-службы и явно проверив сеанс в методах веб-службы.

Почему бы не использовать try { } catch { } для вызова JS-метода?

попробуйте этот ... используйте "статический"

[WebMethod(EnableSession = true)]
public static string Method(string param1, string param2)

Другие вопросы по теме