什么是分享asp经典和asp.net会话的更好方法?

时间:2011-09-14 04:49:58

标签: c# asp.net xml cookies

我有一个asp经典和asp.net应用程序。我想来回分享从asp经典到asp.net的会话。我通过迭代会话名称并将其放在隐藏的对象中来创建一个共享会话的解决方案。这很好,但我不知道这是一个更好的方法来分享会话。我读了一些文章,其中一些使用xml并通过表单发布传递,一些使用cookie,另一些使用数据库。从这种方法,最好的实现,还是有任何其他最佳解决方案?

3 个答案:

答案 0 :(得分:1)

不幸的是,您对已完成内容的描述不是很清楚:

  

我通过迭代会话名称并将其放在隐藏的对象中来创建一个共享会话的解决方案。

所以,我要退后一步,从那里接近它。然而,在此之前,我应该说我认为在这个级别上集成两个系统根本不是一个好主意;你试图通过替换它们运行的​​一些管道来使两个系统协同工作,这样他们就不会注意到它们。这可能会在以后发生错误时打开您的错误,当某些内容发生更改并且未在其他系统中进行相关更改时。我也建议不要大量使用会话,尽管许多ASP系统都滥用它。

基本上,经典ASP和ASP.Net的会话都工作方式相似,它们使用会话标识符(自动存储为cookie - 通常是默认值,或通过URL传递),并允许您存储键/值对反对此会话标识符的对象。

如果您想在会话中共享对象,您可以在两个应用程序交互时直接传递信息(这将是“表单发布”方法),或者将其存储在外部位置,例如数据库。我在表单发布方法方面存在一些问题,即:

  • 它将严格应用于服务器的数据传递给浏览器并再次返回,这会产生安全性和带宽影响(您可能希望至少加密数据);
  • 假设您在两个应用程序之间有明确的移交或边界。这可能是也可能不是。

我并没有真正看到这种方法有太多好处,除了它可能是最简单的,只要你有有限的交互(比如几个字段,只有一两页交互)。同样的论点适用于将所有会话信息传递给浏览器并返回服务器的任何其他方法(例如,将所有内容存储在cookie中)。

其他方法将假设您有一个存储会话的地方,让我们现在假设一个数据库。使用数据库,我们只有一个存在数据的地方,每个应用程序都可以简单地读取和写入这个地方。如果您有大量不同的交互,和/或系统没有明确的相互切换,这显然是一种更容易的方法。

剩下的问题是如何编码不同类型的数据以及如何存储它们。这本质上是一个编码问题,你需要清楚地了解每一方使用的不同数据类型(你应该确保ASP.Net代码使用至少在逻辑上等同于ASP数据类型的类型) )。

为了实现这一点,我将创建一个数据库实现,它支持我想要存储会话数据的方式。它可以是一个简单的键/值对表,以及数据类型信息,或者它可以更加规范化,这是您的决定。在此之后,我将为每个应用程序创建一个Session的新实现,该实现使用此数据库。剩下的就是用您创建的新Session替换对标准Session对象的所有引用,并且一切都应该有效。这可能类似于你所做的,但我特别提到使用数据库作为数据存储。

性能问题和旧会话的清理应该相对容易解决,尽管这种实现肯定比内存实现慢。

答案 1 :(得分:0)

我知道这不是你问题的答案,但我已经完成了自己的一些.net和经典的asp应用程序,只是想根据我的经验给你一些评论:

如果没有详细记录,它可能会令人困惑。 在我们重新部署时未正确记录的一些系统上,我们错过了处理部分功能的.net应用程序

最坚实,最好的工作(根据我的经验)是我们选择一个应用程序作为“核心”,其他部分调用此核心来完成工作。

例如创建.net应用程序(桌面,网络,手持设备),这些应用程序称为经典的asp网页,它们有效地提供了一个简单的xml Web服务 - 看作经典的asp应用程序往往是系统的遗留“核心”部分。 (xml Web服务在经典的asp中编写很有趣 - 认真的是它们快速且易于编码 - 没有类型转换问题;-))

我不知道你在这里做了什么具体但我发现这种方法使代码的结构更直观,并且实际上简化了会话之外的许多奇怪的相关问题,例如在一个应用程序上有一个访问数据库用作它的一部分,只有经典的asp访问它删除了并发问题。

可能没有任何用处,但它的基础经验与大约10个以各种方式集成.net和经典asp的操作管理系统相关。

答案 2 :(得分:0)

好的,对于需要解决此问题的其他人,请参阅此链接:[http://www.codeproject.com/KB/aspnet/AspAspNetSessionBridge.aspx] [1]

[1]:http://www.codeproject.com/KB/aspnet/AspAspNetSessionBridge.aspx。它将有助于解决您的问题,您也可以选择最适合您的问题。 :)