2012-08-24 140 views
0

使用我們當前的設置,需要維護兩個站點之間的鏡像會話,一個現有的ASP.NET網站託管在IIS 6.0中,該站點現在包含iFrame中的新網站,並單獨託管IIS 7.5(這是MVC3)。保持ASP.NET會話活着

有沒有人有任何建議如何保持父會話與子網站會話?

我最初的想法是創建一個ActionFilter,以在OnActionExecuting方法的父網站上將HttpWebRequest發送到HTTPHandler。有人懷疑這將如何保持特定會話內聯,可能缺少有關會話ID的種類的知識?

喜歡的東西:

public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    try 
    { 
     var request = WebRequest.Create(
         ConfigurationManager.AppSettings["HeartbeatURI"]); 
     using (var webResponse = request.GetResponse()) 
     { 
      var response = webResponse as HttpWebResponse; 
      if (response != null && response.StatusCode == HttpStatusCode.OK) 
      { 

沒有人有任何建議/建議嗎?謝謝!

更新:

一些有用的建議,我會調查後是否來自瀏覽器的解決方案,是這樣的:

function setHeartbeat() { 
    setTimeout("heartbeat()", 300000); // every 5 min 
} 

function heartbeat() { 
    $.get(
     "http://soemthing:1234/heartbeathandler.ashx", 
     null, 
     function(data) { 
      setHeartbeat(); 
     }, 
     "json" 
    ); 
} 

將執行,因爲我需要。

+1

我甚至無法想象你如何認爲這些代碼會做你認爲的事。 –

+0

@AndrewBarber更有建設性的添加? – M05Pr1mty

+0

我真的完全喪失瞭如何解決這個問題,因爲您從代碼中看不出會話是如何工作的。我的觀點是:*這不起作用*。但是,不......我現在沒有時間解釋會話基礎知識。也許以後我會刺探答案。 –

回答

1

有你的代碼示例不考慮兩個基本問題:

首先,會話是每個客戶端。此解決方案試圖從輔助服務器'單個連接'心跳'。所以它不會工作。

其次,會話需要客戶端進行交互,無論是通過cookie還是特殊的額外URL值。該解決方案不會嘗試合併這些內容,因此根本不會創建會話。

編輯:還有第三個問題:進程中的會話不保證活着不管你做什麼;應用程序隨時可能被回收,應用程序回收將清除進程中的會話值。因此,您需要有一些外部會話管理系統,以便維護會話(在服務器上均有服務器)。


真的,雖然;試圖保持這樣的會話保持非常脆弱。這聽起來像對你的應用程序非常重要,但幾乎不能保證它會一直工作。國際海事組織(IMO)是一個更好的選擇,讓您的應用程序無需召開會議,或者能夠即時重建會議。

+0

第一點主要是爲什麼我將問題發佈到SO。很明顯,代碼示例沒有考慮到這一點,所以我正在尋找一種解決方案......關於第二點,需求僅僅是打擊客戶端開發團隊在指定URL寫入的HTTP處理程序。你是否建議這種方法不管用? – M05Pr1mty

+0

是的,這種方法不管用;沒有會話將被維護/刷新,因爲您沒有嘗試傳遞會話相關信息,這些信息很可能包含在cookie值中。從*網頁瀏覽器*中刷新頁面是可行的,因爲網頁瀏覽器會在每次請求時發送會話cookie。你的解決方案不會那樣做。 –

+0

因此,作爲一種解決方案,從客戶端向處理程序發送'刷新'也會傳遞會話cookie信息?我認爲這可以通過JavaScript處理?作爲替代方案,我是否無權訪問HttpContext.Current中的會話信息?難道這不能使用? – M05Pr1mty