WCF 会话在 20 分钟后超时,即使我正在使用应用程序 [ASP.NET]

WCF session timeout after 20 minutes even if I'm using the application [ASP.NET]

提问人:Coding_ninja 提问时间:5/27/2023 更新时间:5/29/2023 访问量:55

问:

即使我正在使用它,我的应用程序也会在 20 分钟后超时。 代码如下:

<sessionState mode="Custom" timeout="20" />

现在,我知道解决它的一种方法是增加超时值。但我的要求是,当有人使用它时,应用程序永远不会过期。 有没有合适的替代解决方案?将超时值设置为一个非常长的值似乎有点激烈。配置 IIS 对我来说不是一个选项。

C# asp.net .NET WCF

评论


答:

0赞 QI You 5/29/2023 #1

您的模型是“自定义”。它使用自定义会话状态存储提供程序存储会话状态数据。如:

<configuration>
  <connectionStrings>
    <add name="OdbcSessionServices" 
      connectionString="DSN=SessionState;" />
  </connectionStrings>

  <system.web>
    <sessionState 
      mode="Custom"
      customProvider="OdbcSessionProvider">
      <providers>
        <add name="OdbcSessionProvider"
          type="Samples.AspNet.Session.OdbcSessionStateStore"
          connectionStringName="OdbcSessionServices" 
          writeExceptionsToEventLog="false" />
      </providers>
    </sessionState>
  </system.web>
</configuration>

同样,我建议使用其他两种模式,它们在存储会话方面相对较好。

状态服务器模式,其中会话状态存储在称为 ASP.NET 状态服务的单独进程中。这可确保在重新启动 Web 应用程序时保留会话状态,并且该会话状态可供 Web 场中的多个 Web 服务器使用。例如,存储在名为“Test1”的计算机上。

<configuration>
  <system.web>
    <sessionState mode="StateServer"
      stateConnectionString="tcpip=Test1:42424"
      cookieless="false"
      timeout="20"/>
  </system.web>
</configuration>

SQLServer 模式将会话状态存储在 SQL Server 数据库中。这可确保在重新启动 Web 应用程序时保留会话状态,并且该会话状态可供 Web 场中的多个 Web 服务器使用。如

<configuration>
  <system.web>
    <sessionState mode="SQLServer"
      sqlConnectionString="Integrated Security=SSPI;data 
        source=SampleSqlServer;" />
  </system.web>
</configuration>

评论

0赞 Coding_ninja 5/29/2023
嗨,我无法更改模式,因为我的整个应用程序都是基于它配置的。还有其他解决方法吗?
0赞 QI You 5/30/2023
嗨,我认为这两个示例可以帮助您: 示例会话状态存储提供程序SessionStateStoreProviderBase 类
0赞 QI You 5/30/2023
它实际上存储在服务器的硬盘驱动器上,从而实现更持久的存储。
0赞 Coding_ninja 5/30/2023
嗨,模式在我的应用程序中正确配置,这不是问题,我什至无法更改它。请提出任何替代方案
0赞 QI You 5/30/2023
因为您无法修改配置文件和代码以及模型。您可以尝试“timeout=-1”。这意味着它永远不会超时。