【发布时间】:2011-06-27 01:24:58
【问题描述】:
所以,在你问“你到底是什么意思,一个嵌套在另一个中?”之前,我会尽可能简单地解释它。
存在一个 .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 提供的新核心,但当我完成时,另一个团队已经淘汰了以前的生产和测试服务器,我无法获得备份以查看它是如何配置的。
经过一番折腾,我能够在单个 IIS 应用程序和池中复制上面的层次结构,方法是拆分 B 的 web.config 文件并删除重复的部分——那些已经存在于 A 的 web 中的部分.config。我还将 B 的 bin 文件夹中的所有文件转储到 A 的 bin 文件夹中。
两个站点都编译并由 IIS 提供服务,但我无法使用此结构从 A 的会话中读取任何内容。我对这个结果并不感到惊讶,但我需要找到一种解决方法。简而言之,由于 A 的创建者强加了一些疯狂的许可规则,A 在其会话中存储了一个 sessionID,我需要使用它来获取 B 中的数据源(该 sessionID 需要传递给其核心 API 中的每个函数用户授权)。
关于为什么该功能不再起作用(假设我已正确复制旧环境)的任何想法,或者我可以如何解决它?将会话状态迁移到 SQL 服务器不是一种选择——我无法更改应用程序 A 的任何内容。
我看了一点 A 的代码(尽可能多地使用 Reflector),我试图从会话中检索的变量仍然存在并正在使用中。
任何想法都会很棒!
【问题讨论】:
-
只是在黑暗中拍摄,但也许是机器钥匙问题? msdn.microsoft.com/en-us/library/ms998288.aspx - 应用程序是否在同一个域中运行?
标签: .net asp.net session iis-6 legacy-code