Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 丢失会话变量-什么异常可能导致会话丢失?_Asp.net_Asp.net 4.0 - Fatal编程技术网

Asp.net 丢失会话变量-什么异常可能导致会话丢失?

Asp.net 丢失会话变量-什么异常可能导致会话丢失?,asp.net,asp.net-4.0,Asp.net,Asp.net 4.0,我在一个生产系统(asp.net webforms.net 4)上启用了运行状况监视,我看到有很多错误被发送给我,表明会话变量已丢失 (我正在尝试将会话状态之外的内容附加到实体框架数据上下文,并获得“Value cannot be null,parameter name entity”错误)。因此,不知何故,会话变量现在包含null而不是对象 有趣的是,我们在两个不同的服务器上部署了相同的应用程序—一个DMZ服务器用于外部用户,一个内部服务器用于内部用户。两台不同服务器上的这两个应用程序似乎都有

我在一个生产系统(asp.net webforms.net 4)上启用了运行状况监视,我看到有很多错误被发送给我,表明会话变量已丢失

(我正在尝试将会话状态之外的内容附加到实体框架数据上下文,并获得“Value cannot be null,parameter name entity”错误)。因此,不知何故,会话变量现在包含null而不是对象

有趣的是,我们在两个不同的服务器上部署了相同的应用程序—一个DMZ服务器用于外部用户,一个内部服务器用于内部用户。两台不同服务器上的这两个应用程序似乎都有相同的问题

运行状况监视也在监视生命周期事件,从中我可以看出,我们没有发生类似IIS回收、配置更改、bin文件夹更改、重新编译等情况

我读过这一页:

我可以确认这不是一个响应。重定向问题因为没有发生-这是一个在线申请表-它将一个对象置于页面加载的会话状态,并且有一个多视图-当按下“下一步”时,该对象脱离会话状态,连接到数据上下文,对web表单进行更改,并更新datacontext。所以没有回应。重定向正在发生

我还可以确认来自该链接的“更新1”和“更新2”中的详细信息与我无关-应用程序池中仅运行1个工作进程,并且服务器名称或web地址不包含下划线

我还探讨了会话超时发生的可能性,但它们应该由其他正在运行的代码来处理,以检测会话超时(请参阅:),我已经反复测试了这些代码,部分问题是我自己无法重现此错误

所以:-
-不超时
-不是IIS工作进程回收或任何其他会生成运行状况监视生命周期事件的事件
-不使用响应。重定向
-未获得web场/多个工作进程

然后我发现了这条线索:一位MVP说:

IIS应用程序在任何时候启动 重新启动,所有会话都将重新启动 也所以是的,一般来说 在重新编译期间发生和一些 主要未处理的应用程序级别 例外情况。

但遗憾的是,我们没有详细说明什么样的“主要未处理的应用程序级异常”可能导致会话丢失-这是一个全新的系统,我们仍然有未处理的异常,我们正在努力修复-那么我们在这里讨论的是什么样的异常?一个人会话中的应用程序异常真的可以删除该应用程序持有的所有会话吗

此线程还涉及到它:

我所见过的唯一相似的是 当数据库中发生运行时错误时 ASP.NET应用程序,导致 重新启动应用程序。你是吗 接收应用程序启动事件 也是吗

所以我猜如果我有一个导致应用程序重新启动的运行时错误,那也会生成一个健康监测生命周期事件,对吗?我只是没有得到任何这些

如果我真的可以重新编写这个,那会容易得多,但我就是做不到

不管怎样,很抱歉问了这么长时间,希望有人有一些想法


关于

< P>您是否考虑将会话状态放置在应用程序之外,例如使用ASP.NET? 默认情况下,会话状态在应用程序内保持。它不能跨多个服务器使用,也不能跨应用程序崩溃(即应用程序中任何未处理的异常)进行维护

  • 使用SQL Server模式使相同的会话状态在多台服务器上可用

  • 或者,如果负载平衡器保证强会话关联性,则可以使用asp.net状态服务器管理每个服务器中的状态,使状态在应用程序重新启动后仍然有效


  • 你好感谢您的评论,我们在今天早上的一次更新中将会话状态移出了进程(到ASP.net状态服务器),但不幸的是,它没有修复该问题。我们仍然有会话变量丢失。连同系统管理员在IIS中的其他调整,现在已经起作用了。很抱歉接受缓慢,但感谢您的帮助。@bgs264:您能和我们分享一下那些“其他调整”是什么吗?