2010-09-28 32 views
0

我目前正在努力解决与我一直在努力一段时间的网站有关的错误。我遇到的问题是当用户同时致电该网站时,会话对象偶尔会被覆盖。使用会话进程时对象成员损坏的问题

我的当前会话模式是在Proc中,并在阅读another thread regarding a similar issue我相信我的问题可能有关。

该站点使用Sql Reporting Services通过查询数据库和使用来自两个不同Web服务的XML来生成一些合法文档。在会话中,我存储一个自定义对象,其中包含保存数据的成员以在SRSS中生成文档。

我在同一时间打开网站的两个实例时发生了问题。会话ID是不同的,但是当我开始生成表单时,两个对象以某种方式相互冲突。我仍然不确定它是如何发生的。

到目前为止,我的想法是尝试在会话中明确存储班级中一些更敏感的成员,以明确是否有助于纠正某些腐败或转移到其他形式的会话管理。我有权访问SQL服务器,所以我可以使用SQL会话存储模式。

任何人有任何建议/想法?

+1

任何情况下,创建有问题的整个过程的顺序图确定您正在编写和从会话对象中检索的所有点。这个问题很可能会变得明显。如果我不得不猜测,这听起来像你可能会坚持一些相关的数据,可能是由用户ID或其他商店的数据库键入的数据库正在写入。每个用户都获得一个独特的会话,并且据我所知,它独立于登录的实际用户。 – Doug 2010-09-28 14:10:57

+0

对象数据存储的唯一位置是在会话中。在自定义类中有2个静态变量,并且它们只是保持用户访问站点的值而已。数据库交互仅用于读取报告查看器中使用的数据,目前没有任何内容正在写入数据库。 – Philter 2010-09-28 15:08:47

+0

在这种情况下(您不知道问题出在哪里),您需要开始收集信息(即添加日志记录或单步执行代码)。我会从应用程序调用数据库的地方开始。检查每次调用传递给数据库的参数值,以查看1.“它们与众不同吗?”或者2.“他们是否一样?”。如果#1,那么问题发生在那个点之后。如果#2,那么问题发生在那个点之前。开始通过应用程序进行健康检查,直到找到问题发生的位置。 – 2010-09-28 15:47:25

回答

1

我的猜测是,你在会话存储可以自定义对象:

  1. 有一些静态变量。
  2. 引用具有静态变量的另一个对象。
  3. 也存储在应用程序或高速缓存字典中或某处的静态变量中。
  4. 引用一个对象,该对象也存储在应用程序或高速缓存字典中或某处的静态变量中。

我会建议分析您在会话中存储的对象的对象图,以查看是否有任何部分可以从多个线程基于上述标准1,2和4访问。

如果一切看起来罚款对象图,然后我可能会开始寻找对象如何填充,寻找3或4

+0

感谢您的帮助。我在代码中注意到,当我正在介绍Web服务处理程序类是否返回旧的XML时,无论用户如何。发现写这个类的人正在使用被发送到WebService的静态字符串,并且字符串在站点调用之间存储了旧数据。 – Philter 2010-09-28 16:33:12