Как исправить: 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: сбой метода сервера «Метод» со следующей ошибкой: System.InvalidOperationException - Ошибка аутентификации.

Это исключение вызывается методом «функция 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));
}

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

4 ОТВЕТА
РЕШЕНИЕ

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

0
15.12.2008 15:35:21

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

0
18.12.2008 03:52:58

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

0
18.12.2008 04:31:30

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

[WebMethod(EnableSession = true)]
public static string Method(string param1, string param2)
-1
6.08.2010 05:01:26