在Win2008 ASP.NET网站上随机清除会话

在Win2008 ASP.NET网站上随机清除会话,asp.net,session,iis,windows-server-2008,session-state,Asp.net,Session,Iis,Windows Server 2008,Session State,我在网上找不到关于这个的任何信息,所以我想我应该在这里问一下。在Windows 2008服务器环境中,是否有人在随机清除会话时遇到问题?这个问题完全是随机的,而且非常不可预测。除了注销时,我没有清除会话的代码,也不太确定是什么导致了它(嗯,我有一些想法…) 我的主机告诉我,Windows 2003更擅长管理会话变量,如果我要迁移到2003服务器环境,我很可能会摆脱这个会话清除问题。问题是,我已经在IIS7上安装并运行了URL重写模块,我不想移动或重新配置URL重写。技术支持人员表示我正在运行的应

我在网上找不到关于这个的任何信息,所以我想我应该在这里问一下。在Windows 2008服务器环境中,是否有人在随机清除会话时遇到问题?这个问题完全是随机的,而且非常不可预测。除了注销时,我没有清除会话的代码,也不太确定是什么导致了它(嗯,我有一些想法…)

我的主机告诉我,Windows 2003更擅长管理会话变量,如果我要迁移到2003服务器环境,我很可能会摆脱这个会话清除问题。问题是,我已经在IIS7上安装并运行了URL重写模块,我不想移动或重新配置URL重写。技术支持人员表示我正在运行的应用程序池配置正确。我的会话超时在Web.config中设置为60分钟,我的主机告诉我,我的域的会话超时设置为60分钟

我可以选择使用Azure AppFabric缓存进行会话,但我不想每月额外支付50美元——这是一个相当小且收入较低的网站。我目前正在使用SQLAzure数据库,但据我所知,SQLAzure上的数据库会话并不理想


想法?

您是否正在修改网站中的任何文件


对网站文件夹或文件结构的更改通常会触发应用程序池回收,重置会话。解决方法是使用持久的会话存储,如。

是否修改网站中的任何文件


对网站文件夹或文件结构的更改通常会触发应用程序池回收,重置会话。解决方法是使用持久会话存储,如。

最有可能的答案是,由于某种原因,您的应用程序池正在对您进行回收,每次都会转储进程内会话。直接原因可能有很多,尤其是在共享应用程序池的情况下。查看应用程序池是否被转储的一个简单方法是利用asp.net心跳监测,它可以配置为在这些事件发生时向您发送电子邮件

最有可能的答案是,由于某种原因,您的应用程序池正在回收,每次都会转储您的进程内会话。直接原因可能有很多,尤其是在共享应用程序池的情况下。查看应用程序池是否被转储的一个简单方法是利用asp.net心跳监测,它可以配置为在这些事件发生时向您发送电子邮件

您是否正在使用共享AppPool和InProc会话状态?感觉您的应用程序域正在循环使用。您可以将静态DateTime添加到一个类中,将其初始化为DateTime。现在,在静态构造函数中,在主页中访问它以确保静态构造函数运行,并构建一个特殊页面以显示其值。下次会话消失时,请运行您的特殊页面,查看应用程序域已运行了多长时间。我也遇到过类似问题。但我很少使用技术来缩小原因。尝试添加应用程序开始、应用程序结束、应用程序错误、会话开始、会话结束的日志记录尝试记录尽可能多的信息。这帮助我孤立了一个问题。我的主人有机器配置,会话超时配置只有3(是)分钟。谢谢大家。我确信这是我的主机的问题,我刚刚进行了重构以使用一些数据库调用。在会话中存储只是简单得多,但我想我现在已经修复了它。最终,当我再次需要会话时,我会知道使用比InProc更好的存储机制。您是否使用共享AppPool和InProc会话状态?感觉您的应用程序域正在循环使用。您可以将静态DateTime添加到一个类中,将其初始化为DateTime。现在,在静态构造函数中,在主页中访问它以确保静态构造函数运行,并构建一个特殊页面以显示其值。下次会话消失时,请运行您的特殊页面,查看应用程序域已运行了多长时间。我也遇到过类似问题。但我很少使用技术来缩小原因。尝试添加应用程序开始、应用程序结束、应用程序错误、会话开始、会话结束的日志记录尝试记录尽可能多的信息。这帮助我孤立了一个问题。我的主人有机器配置,会话超时配置只有3(是)分钟。谢谢大家。我确信这是我的主机的问题,我刚刚进行了重构以使用一些数据库调用。在会话中存储只是简单得多,但我想我现在已经修复了它。最终,当我再次需要会话时,我将知道使用比InProc更好的存储机制。谢谢提醒。我仍然没有缩小导致它的范围,但在昨晚的大部分时间里我都在使用它之后,我只是决定取消会话(我只存储了大约8个会话),并用BL和DB调用替换它们。我可能最终需要回到会话,但目前这应该是可行的。我使用的是Azure数据库,我很难确定SQL Server会话状态提供程序在技术上不受支持,但我可以使用Azure AppFabric,我可能会这样做。感谢您花时间回复!它仍然不受支持?大约一年前我在Azure上玩过,有一些黑客实现允许SQL会话状态提供程序工作,但它需要使用一个工作者角色,该角色只运行一个存储过程(代替SQL中的作业队列)。他们还没有添加支持,这真是太疯狂了。是的,据我所知,微软首选的实现方式是通过AppFabric缓存,我完全可以理解。我知道SQLAzure方法应该可以很好地工作,我也可以很容易地做到这一点。我刚刚决定去掉5-6个会话变量,并进行一些额外的数据库调用。不过谢谢你的评论!:)谢谢你的提醒。我还没有弄清楚是什么引起的,但是在和你坐在一起之后