Как исправить: InvalidOperationException по истечении времени ожидания сеанса в вызове Ajax WebService - PullRequest
2 голосов
/ 15 декабря 2008

Мы вызываем веб-сервис 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: сбой метода сервера «Метод» со следующей ошибкой: 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));
}

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

Ответы [ 4 ]

0 голосов
/ 06 августа 2010

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

[WebMethod(EnableSession = true)]
public static string Method(string param1, string param2)
0 голосов
/ 18 декабря 2008

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

0 голосов
/ 18 декабря 2008

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

0 голосов
/ 15 декабря 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...