我有2個應用程序在同一個域上運行。該流程行進像這樣:從另一個ASP.NET應用程序保持相關的ASP.NET應用程序的會話
- 應用1
- 應用1 - >應用2
- 應用2 - >應用1
應用1是的WebForms(asp.net框架2.0),應用2是ASP.NET MVC 3(框架4.0)
當用戶在應用,我想保持會話處於活動上應用1。
在建設應用1,我們建立了一個 「KeepSessionAlive.ashx」 處理程序簡單地做會議( 「KeepSesssionAlive」)= DateTime.Now()時要求,如this article描述。我們這樣做是因爲這是一個評估應用程序,在測試的一些較難部分中,用戶可能需要很長時間才能選擇答案。下面是代碼:
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() { });
所以,我想我可以用$就調用相同的處理從應用2 (),我甚至研究過使用jsonp,但這似乎並不奏效。我編寫了將KeepSessionAlive.ashx中的所有會話變量記錄到文件中的代碼,甚至通過jsonp響應來返回內容,並且數據看起來正確。
然而,做一個測試,我在應用徘徊2足夠長的時間申請1的會議結束,然後試圖從應用1做過渡 - >應用2,當我到達返回頁面應用程序1我遇到了System.NullReferenceException: Object reference not set to an instance of an object.
錯誤,因爲我試圖引用Session中的一個對象。會話中唯一的值是Session(「KeepSessionAlive」)。我認爲這是因爲它創建了一個新的會話,但是如果是這樣的話,爲什麼我的測試會記錄會話值,顯示所有的會話變量?
是否有任何其他方法我可以用它來保持申請1的會議還活着,而用戶在應用2填寫表格?
執行應用程序共享一個應用程序池,或者是他們隔離?如果它們是孤立的,每個應用程序是否有「KeepSessionAlive.ashx」,或者是應用程序1中唯一一個? – 2011-04-12 23:16:30
@Chris Pebble - 他們在孤立的應用程序池(應用程序1是2.0框架應用程序,應用程序2是4.0)。只有應用程序1具有「KeepSessionAlive.ashx」 – JustinP8 2011-04-13 15:27:00