我在之前的一个问题中谈过这个问题,但我已经缩小了这个问题,以便能够得到回答。首先,一些背景知识。
我有一个ASP.net网站,它在本地服务器上正常运行,但是当它在实时服务器上并在外部访问时,会出现一些偶尔会出现错误的会话数据问题。第一个问题是IE9的一个问题。会话变量在到达第二页并点击存储过程后就不会持久存在。我通过强制页面在IE7模式下使用 -
来修复此问题在某些浏览器上仍会出现这种情况(特别是它出现了 - 使用firefox)但我创建了一个循环,当会话变量为空时强制它返回到菜单页面,因此它只是在页面未加载时显示可以再次按下“打开”按钮。
但是,当我尝试在表单上保存数据时,会出现新问题。它将一些会话变量传递给存储过程接口(如员工ID等),似乎发生的事情是它超时。但是,在webconfig和IIS中设置的会话的所有超时都是非常高的数字(许多小时),并且工作进程设置为永不过期或回收。此外,它甚至在一两分钟后发生,因此它不能超时击中。就像它随机丢失会话值一样。奇怪的是,如果你回去再次保存 - 用相同的数据执行相同的操作 - 它往往会起作用。有时它需要几次迭代,但最终它会起作用。
奇怪的是,它往往会随机丢失视图状态的部分 - 例如字段值 - 但这可能是无关的,并且与在加载时自动填充的字段有关。但是我想我会把它包括在内,以防它提供和解释为什么它可能会这样做。
我正在考虑通过在页面加载时将会话变量转储到viewstate变量来解决方法,但我真的想直接解决这个问题所以我将来不必处理它。我不能做那样的事情。是否有一些IIS(顺便说一下是IIS 6)可能是罪魁祸首?会话变量是否因为在被大量抛出时死亡而闻名?我不能说我对服务器设置了解很多,但我从这种情况中学到了很多东西,并且击败这对我的士气来说将是一个美妙的胜利。感谢您的阅读,对不起,这么久!
答案 0 :(得分:0)
请检查此服务器是否负载均衡。
在任何一种情况下,请查看此文章。 http://aspalliance.com/1182_Troubleshooting_Session_Related_Issues_in_ASPNET
希望这有帮助。
答案 1 :(得分:0)
OK!
阅读完帖子并思考后,我认为最有可能导致问题的原因是狡猾的ISA Server 。代理往往会弄乱HTTP内容,决定更改标题等。正如您所提到的,只有在外部访问时才会发生这种情况。这是人处于中间问题的标志。
现在要证明,您必须比较外部发送的标头和您收到的标头。这有点困难,但根本不可能。您只需要在服务器端记录所有标头(请求),同时从客户端的计算机上执行相同操作(可能使用fiddler)。
这应该可以证明狡猾的代理 - 我们公司也有类似的问题。
答案 2 :(得分:0)
嗯,我做了几件事,它现在正在运作,但我没有测试哪个是实际的解决方案,而且我的理解中最好的一个都不应该实际修复了这个问题。首先,在某些时候,我将可用的工作进程从一个增加到三个,我认为这意味着允许用户在必要时在服务器上运行多个进程,但事实证明这只是服务器场所必需的。所以我把它重新设定为一个。在此问题出现之前就已经出现了这个问题,我基本上只是看看会解决什么问题。
我做的第二件事是在一个私有子中添加一个简单的if语句(如果会话变量为空),该私有子包含发送会话变量的存储过程的接口。我认为这将是一种解决方法,但后来我查看了我的旧错误日志,它甚至没有抛出错误的存储过程接口。我根本不知道为什么它会修复这个问题。
我还在那个页面上设置了一些类似于Rahul链接我的PerfLogs来尝试监控会话的进展情况。
现在除了奇怪的事实,那些尝试中的某些东西(以及我所做的其他任何小事)实际上修复问题,事实上它从来没有发生在本地开始。我不确定发生了什么,但它现在正在工作,我不会再深入挖掘它,因为我有很多项目需要注意。在我看来,这很可能是未来可能出现的ISA服务器的一个问题,但是我对他们设置的不了解限制了我真正进入那里并四处寻找自己。当我询问它时,我被告知它应该允许我需要通过它发送的所有内容。无论如何,我很高兴能够继续前进并使其发挥作用。希望所有这些能帮助处于类似情况的人!感谢所有人的帮助!
答案 3 :(得分:0)
这次我实际上找到了真正的解决方案。它仍然没有多大意义,但我认为我将它带到这里只是为了让所有人都能看到。事实证明,从表中提取的日期之一被存储在会话变量中作为空白(即使它不应该存在)然后以某种方式,即使有一个if语句应该已经被阻止它,它试图将会话的空字符串转换为日期。当然很奇怪。就好像会话在到达if语句时有一个值,然后在根据条件检查后,它将其更改为空字符串并抛出错误。
事实证明这不是一个会话问题,只是一个奇怪的日期问题。它只出现在一个人和一个特定日期的桌子上。我通过简单地在它周围放置一个try-catch来修复它。从那以后,一切都为这个人做得很好。再次感谢大家的帮助!