2015-06-29 3 views
4

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

Мой код, как показано ниже:

JQuery Код:

//User clicks "SyncButton" to initiate sync process 
    $('#SyncButton').on('click', function (event) { 
     //Some UI Code 
     $.ajax({ 
      type: 'POST', 
      beforeSend: startService, //startService has some UI code 
      url: "FirstAjaxURL", 
      data: null, 
      contentType: "application/json", 
      success: function (data) { 
       ServiceSuccess(data); 
      }, 
      error: serviceError 
     }); 
    }); 

function ServiceSuccess(data) { 
    var html = ''; //code to get html from data 
    $('#divSync').html(html); 
    if (!($('#delete').length > 0)) { 
     RenderBusinessGrid(); 
    } 
}; 

function RenderBusinessGrid() { 
    var allBusiness = ""; 
    $.getJSON("SecondAjaxURL", function (data) { 
     //Some UI handling code 
    }); 
    $('#divSyncDetails').height('400px'); 
} 

MVC код:

[HttpPost] 
public string FirstAjaxURL() 
{ 
    //make some DB hits 
    //fetch data 
    //create couple of zip files 

EDIT 6 июля 2015

//Unzip a zip file in one of the sub-directories. This zip file contains multiple sub-directories and files. 

EDIT 6 июля 2015

//save them in two separate folders in separate folders under root directory 

    /*LOGS SUGGEST ALL SESSION KEYS WERE AVAILABLE HERE*/ 
    return "some string result"; 
} 

public ActionResult SecondAjaxURL() 
{ 
    /*LOGS SUGGEST SESSION KEYS NOT AVAILABLE HERE*/ 

    //do some DB operation 
    return jsonResult; 
} 

Что все, что я пытался до сих пор:

  1. Проверил настройки IIS для времени пула приложений рецикла, они, кажется, хорошо
  2. Тайм-аут сеанса устанавливается к большому значению, он не истекает, если я покидаю систему для простоя
  3. Подтвержденное отсутствие необработанного исключения при первом ударе ajax
  4. Tri ред сохранения архивных файлов вне структуры каталогов приложения
  5. Пробовал заменить $ .getJSON с $ .ajax (я знаю его глупо, чтобы попробовать это, но вы никогда не знаете ... :)

Примечание: В большинстве случаев сессии timeout во втором вызове ajax - самый первый раз, когда пользователь инициирует процесс синхронизации. Хотя мы наблюдали довольно часто случаи, когда это происходит второй или третий раз.

некоторые дополнительные детали: Я проверил журналы событий и обнаружил, что каждый раз, когда он выходит из ниже ошибки регистрируется в окне просмотра событий:

Код события: 4005 Event сообщение: Формы проверки подлинности не удалось для запроса. Причина: указанный билет недействителен.

Пожалуйста, предложите, что еще я мог бы попробовать/проверить, чтобы получить основную причину этой проблемы, ее прослушивание меня очень долго. Все указатели приветствуются.

Спасибо, Ravi

+1

Является ли ваше приложение размещенным на нескольких серверах с загрузчиком нагрузки на картинке? – nikhil

+1

Вы установили '' в свой web.config? – squiroid

+0

@nikhil: нет выделенного сервера без балансировки нагрузки или что-то в этом роде. Это просто простой SPA-центр на базе MVC. – TechnicalSmile

ответ

1

У меня была аналогичная проблема несколько лет назад. Проблема у меня похожа на What could cause an asp.net application to forget a user?.

Ключ в собственном ответе автора: Проблема заключается в том, что пул приложений перерабатывается, а файл cookie аутентификации становится недействительным, поскольку он больше не может быть прочитан по мере изменения машинного ключа. Решение заключалось в том, чтобы добавить сегмент machineKey в файл web.config и поставить статический ключ машины.

+0

Спасибо Эрик за ваш ответ, я попробовал добавить машинный ключ в свой файл конфигурации, но это тоже не помогло. Я попробовал добавить машинный ключ с помощью генератора ключей машины IIS, а также, как это предлагается в следующей ссылке: http://www.iis.net/learn/troubleshoot/security-issues/troubleshooting-forms-authentication – TechnicalSmile

+0

Также вы предлагали, быть в правильном направлении, так как в средстве просмотра событий появляется сообщение об ошибке «Код события: 4005 Сообщение о событии: Ошибка проверки подлинности форм для запроса. Причина: указанный билет недействителен». – TechnicalSmile

0

Моя проблема вкратце: в первом аяксе были выполнены некоторые операции, которые включают в себя добавление/обновление нескольких файлов/папок и второй айакс-хит, который инициируется после того, как результат первого клиента заканчивается из-за недоступности переменных сеанса.

первопричины: File Change Notification (FCN) поведение

Решение: В моем случае, я в конечном итоге переместить папку виновника, где все изменения файла/папки были происходящий вне веб-приложения. Так как мне нужен прямой доступ к файлам этой папки из веб-приложения, я превратил эту папку в виртуальный каталог.

Так раньше это было как этот

enter image description here

и теперь это выглядит с моей фактической папке активов сидит вне моего веб-приложение со своим собственным виртуальным каталогом и отдельным пула приложений возиться с :)

enter image description here

Примечание: Я попытался с помощью настройки web.config FCNMode, что, кажется, работает для некоторых пользователей на .NET 4.5, но, к сожалению, он не работал для меня. Если вы столкнулись с аналогичной проблемой, я попробую сначала попробовать эту настройку.

Смежные вопросы