繁体   English   中英

如何控制服务器端AJAX呼叫超时

[英]How to control server side AJAX call timeout

我在ASP.NET中编写服务器代码并使用MVC框架。 我的客户代码是javascript。

无论是否使用JQuery从浏览器向服务器发送AJAX请求,您都可以设置超时,当然浏览器也具有可以单独执行的超时。 如果达到了任何一个超时,则将调用ajax调用的failure方法,并且其中一个参数指定了超时。

然而。 我最近发现,服务器似乎可以使AJAX调用超时,并以500错误代码终止,客户端将以500错误代码的形式接收该错误代码,这与任何意外错误没有区别。 但是,在这种情况下,底层服务器工作进程继续进行-只有Web服务器本身(在我的情况下为IIS)中断并发送500错误代码,而不会通知工作进程,因此工作进程继续幸福地不知道有一个问题。

同时,错误处理程序中用于AJAX调用的客户端的状态为500,自然会将其解释为工作进程失败,可能是未处理的异常和不正常的终止。 据我所知,客户端没有办法知道问题是超时,与意外的异常分开。 因此,客户端代码可能错误地认为工作进程已死,而实际上却非常活跃。

所以....三重问题:

  1. MVC ASP.NET中是否可以控制服务器超时设置?
  2. 如果服务器代表服务器超时,是否有一种方法可以使工作进程认为服务​​器花费的时间太长而无法得到通知?
  3. 客户端AJAX故障回调是否有办法知道这个特定的500错误不是因为工作程序有意外错误,而是因为包装服务器代码确定它花费了太长时间?

wrt#3,我可以看到Ajax响应的responseText属性确实包含一些html,如果渲染该HTML会告诉用户超时,但是以编程方式进行解析似乎真的很混乱而且不可靠。

还有其他人遇到吗?


添加/编辑,太平洋夏令时间下午1/26:

基于下面的评论暗示我可能会在本文中找到解决方案,我实现了建议的过滤器。 这没用。 我能够通过从工作进程中显式抛出未处理的超时异常来触发新的过滤器,因此按照其他SO文章的说明,我的过滤器显然在起作用,但未触发。

我应该添加此应用程序正在作为Windows Azure网站运行。 我从间接证据/数据中认为,我能够积累VM上的IIS本身正在中断请求并以500错误进行响应,而无需告诉基础工作进程或MVC应用程序它已终止。请求。

因此,这似乎是一个IT问题,即能够为该特定网站在该特定VM上配置IIS。

从我的数据来看,似乎IIS在230秒后才取消请求。

试试这个web.config条目:

<system.web>
<httpRuntime executionTimeout="your-timeout-in-seconds">
...
</system.web>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM