C# asp.net中有时仅缺少会话数据

C# asp.net中有时仅缺少会话数据,c#,asp.net,azure,session,C#,Asp.net,Azure,Session,我的asp.net应用程序最近托管到azure,之后我们遇到了一个问题,即会话中丢失数据,这不是一直都在发生,而是随机发生的,但当它托管在IIS中时,这个问题没有发生 我们有一个自定义的实体列表,当用户上传我们保存到DB中的文件时,我们有一个文件上传工具,同时保持会话状态,同时他们上传应用程序成功处理并保存到DB和会话中的“N”个文件。但在相同的生命周期中保存(此处为按钮单击事件)后,当页面加载时,数据丢失。我已检查/调试这些事件之间没有更改会话数据的代码 注意:此问题仅发生在服务器上,而不发生

我的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文件的名称和内容,那就太棒了。