2012-08-24 141 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