繁体   English   中英

在两个ASP.NET应用程序之间共享会话,其中一个嵌套在另一个ASP.NET应用程序中

[英]Sharing session between two ASP.NET applications, where one is nested within the other

那么,在你问“你的意思是什么之后,一个嵌套在另一个之内?” 我会尽可能简单地解释一下。

存在.NET Web应用程序(A)。 构建了一个补充应用程序(B),它可以处理几个相同的核心组件。 之前的一家咨询公司以某种方式应用程序A中“安装”了应用程序B 以便B可以背负A的会话。 所以,像这样:

- Application A (C:\Inetpub\wwwroot\ApplicationA)
    + Application B (C:\Inetpub\wwwroot\ApplicationA\sup\ApplicationB

之前的公司没有留下关于他们如何或为什么这样做的文档,但它对他们有用。 我现在面临的困境是:应用程序A升级,使B无用。 我更新了B来运行A提供的新核心,但是当我完成时,另一个团队已经摧毁了之前的生产和测试服务器,我无法获得备份以查看它是如何配置的。

经过一系列的改进后,我能够通过切断B的web.config文件并删除重复的部分 - 在A的web.config中已存在的部分,在单个IIS应用程序和池中复制上面的层次结构。 我还将B的bin文件夹中的所有文件转储到A的bin文件夹中。

两个站点都编译并由IIS提供服务,但我无法使用此结构从A的会话中读取任何内容。 我对这个结果并不感到惊讶,但我需要找到一个解决方法。 简而言之,A有一个存储在其会话中的sessionID,我需要用它来获取B中的数据源,因为A的创建者施加了一些疯狂的许可规则(sessionID需要传递给其核心API中的每个函数)用户授权)。

关于为什么功能不再有效的任何想法(假设我已经正确地复制了旧环境),或者我如何解决它? 移动到SQL服务器以获取会话状态不是一个选项 - 我无法更改有关应用程序A的任何内容。

我看了一下A的代码(就像我敢用Reflector一样),我试图从会话中检索的变量仍在那里并被使用。

任何想法都会很棒!

由于它们是两个独立的应用程序,因此它们(显然)具有两个不同的会话范围。 您可以在一个会话而不是另一个会话中,A中的会话可以在B中的会话之前到期,强制A在B仍在使用旧会话时创建会话。 没有任何东西将A链接到B,反之亦然,所以逻辑上没有直接的方式它们甚至可以共享对象,因为它们之间没有任何有意义的相关性。

缺点是 - 您不能(轻松)直接在两个不同的应用程序之间共享会话数据。 此问题的常见解决方案是通过查询字符串或cookie(如果它们位于同一域中)在两个应用程序之间传递公共ID,并且都使用该ID引用它们都可以访问的数据库中的公共记录。 从那时起,可以通过数据库共享信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM