如何减少 asp.net 中的响应超时?

How can I reduce the response timeout in asp.net?

我有一些 http 客户端有时需要很长时间才能完成请求,我想在特定时间长度(比如 5 秒)后将它们关闭。

我知道在web.config中你可以将executionTimeout设置为一个值,但是当我设置它时,api似乎并没有遵守它。

为了对此进行测试,我正在创建一个控制器,其中 Thread.Sleep 设置的值大于我在 web.config 中设置的值,但响应没有被切断。

您可以在 web.config 中设置该值。例如,要更改一个特定页面的超时:

<location path="somefile.aspx">
    <system.web>
        <httpRuntime executionTimeout="180"/>
    </system.web>
</location>

时间以秒为单位。

通常,首先要做的也是最简单的事情就是将 configuration/system.web/sessionState@timeout 值更改为“90”​​之类的值。这应该意味着您希望用户的会话持续到 90 分钟 window 空闲时间结束。

web.config 的变化:

... ...

这里有几个问题联系在一起: 应用程序池的工作进程默认空闲超时也设置为 20 分钟 默认存储会话状态的方式是在IIS进程中

应用程序池空闲超时

可以通过单击应用程序分配到的应用程序池上的高级设置 (IIS 7.5) 来找到应用程序池的设置。 <--图片放在这里-->

确保至少将此值设置为会话超时,以确保所有会话在整个会话超时期限内持续存在。 这两个值相互依赖的原因是因为会话信息实际上存储在应用程序池的工作进程中。也就是说,如果工作进程因为任何原因被关闭或杀死,会话信息将丢失。

会话存储模式 session信息的存储方式有:

  • InProc(或 In Process)——默认——在 IIS 工作进程中存储会话信息
  • StateServer – 在单独的进程中存储会话信息(ASP.NET 状态服务)
  • SQL服务器 – 在SQL数据库
  • 中存储会话信息

唯一容易丢失工作进程会话信息的模式是当状态存储在工作进程中时。 StateServer 和 SQLServer 模式都不受工作进程重置的影响。同样,当需要在多个 IIS 服务器之间共享会话状态时,StateServer 和 SQLServer 模式是唯一的选择。

虽然我无法开箱即用,但我使用 Polly

取得了一些成功