У меня есть 2 приложения, работающие в одном домене. Поток идет так:
- Заявка 1
- Приложение 1 -> Приложение 2
- Приложение 2 -> Приложение 1
Приложение 1 - это WebForms (asp.net framework 2.0), Приложение 2 - это ASP.NET MVC 3 (framework 4.0)
Пока пользователь включен Приложение 2 , я хотел бы сохранить сеанс на Приложение 1 .
При создании приложения 1 мы встроили обработчик «KeepSessionAlive.ashx», который просто выполняет Session («KeepSesssionAlive») = DateTime.Now () при запросе, как описано в этой статье. . Мы сделали это, потому что это приложение для оценки, и во время некоторых сложных этапов теста пользователю может потребоваться много времени, прежде чем он выберет ответ. Вот код:
Public Class KeepSessionAlive : Implements IHttpHandler, IRequiresSessionState
Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
context.Session("KeepSessionAlive") = DateTime.Now
End Sub
Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
Get
Return False
End Get
End Property
End Class
Затем я просто периодически вызываю этот обработчик в Application 1
, используя jQuery:
$.post("KeepSessionAlive.ashx", null, function() { });
Итак, я подумал, что могу вызвать тот же обработчик из Application 2 , используя $ .ajax (), я даже изучил использование jsonp, но, похоже, это не работает. Я написал код для записи всех переменных сеанса из KeepSessionAlive.ashx в файл и даже для возврата чего-либо через ответ jsonp, и данные выглядели правильно.
Однако, выполняя тест, в котором я задержался в Приложении 2 достаточно долго, чтобы истечь сеанс Приложении 1 , а затем пытался выполнить переход из Приложении 1 -> Приложение 2 , когда я попадаю на страницу возврата в Приложение 1 Приветствуется ошибка System.NullReferenceException: Object reference not set to an instance of an object.
, потому что я пытаюсь сослаться на один из объектов в сессии. Единственное значение в сеансе - Session (KeepSessionAlive). Я предполагаю, что это потому, что он создал новый сеанс, но если это так, почему мои тесты, в которых были записаны значения сеанса, отображали все переменные сеанса Application 1 ?
Существуют ли другие методы, которые можно использовать, чтобы сохранить Сессию Приложения 1 , пока пользователь заполняет формы в Приложение 2 ?