C# asp.net中有时仅缺少会话数据
我的asp.net应用程序最近托管到azure,之后我们遇到了一个问题,即会话中丢失数据,这不是一直都在发生,而是随机发生的,但当它托管在IIS中时,这个问题没有发生 我们有一个自定义的实体列表,当用户上传我们保存到DB中的文件时,我们有一个文件上传工具,同时保持会话状态,同时他们上传应用程序成功处理并保存到DB和会话中的“N”个文件。但在相同的生命周期中保存(此处为按钮单击事件)后,当页面加载时,数据丢失。我已检查/调试这些事件之间没有更改会话数据的代码C# asp.net中有时仅缺少会话数据,c#,asp.net,azure,session,C#,Asp.net,Azure,Session,我的asp.net应用程序最近托管到azure,之后我们遇到了一个问题,即会话中丢失数据,这不是一直都在发生,而是随机发生的,但当它托管在IIS中时,这个问题没有发生 我们有一个自定义的实体列表,当用户上传我们保存到DB中的文件时,我们有一个文件上传工具,同时保持会话状态,同时他们上传应用程序成功处理并保存到DB和会话中的“N”个文件。但在相同的生命周期中保存(此处为按钮单击事件)后,当页面加载时,数据丢失。我已检查/调试这些事件之间没有更改会话数据的代码 注意:此问题仅发生在服务器上,而不发生
注意:此问题仅发生在服务器上,而不发生在本地主机上。如果它在IIS上工作,则不会在Azure上工作。 听起来像是会话超时问题(可能是全局服务器设置)。
我建议在
web.config
文件中明确添加会话超时
<system.web>
<sessionState mode="InProc" cookieless="false" timeout="80" />
</system.web>
进程模式,将会话状态存储在Web服务器的内存中。这是默认设置
cookieless=false,如果没有请求被视为无cookieless
超时,指定会话在放弃之前可以空闲的分钟数
在上阅读更多信息,我注意到Azure在问题中被标记 在Azure中,我们应该运行至少两个实例,这基本上是web场环境。因此,我们需要使用Redis缓存
<configuration>
<connectionStrings>
<add name="RedisConnection" connectionString="REDIS_CONNECTION_STRING"
providerName="System.Data.SqlClient"/>
</connectionStrings>
<system.web>
<sessionState mode="Custom" customProvider="SessionStateStore">
<providers>
<add name="SessionStateStore"
type="Microsoft.Web.Redis.RedisSessionStateProvider"
connectionString="RedisConnection" />
</providers>
</sessionState>
</system.web>
<configuration>
您只需在Azure中创建Redis缓存,并将以下内容添加到web.config
<configuration>
<connectionStrings>
<add name="RedisConnection" connectionString="REDIS_CONNECTION_STRING"
providerName="System.Data.SqlClient"/>
</connectionStrings>
<system.web>
<sessionState mode="Custom" customProvider="SessionStateStore">
<providers>
<add name="SessionStateStore"
type="Microsoft.Web.Redis.RedisSessionStateProvider"
connectionString="RedisConnection" />
</providers>
</sessionState>
</system.web>
<configuration>
如果您能提供一个web.config文件的名称和内容,那就太棒了。