asp.net的Web应用报“超时时间已到。在操作完成之前超时时间已过或服务器未响应”问题的解决

本文探讨了应用中出现的超时问题,并提供了两种解决方案:修改web.config文件和调整存储过程执行时间。同时强调了根本解决方法是对业务逻辑和存储过程的优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

昨天,接到客户反映说应用报“超时时间已到。在操作完成之前超时时间已过或服务器未响应”问题。从网上了一些资料,发现这个问题还是很普遍的。主要有以下两种解决方法:

第一种方法:在web.config中加上以下语句:

<system.web>
< httpRuntime maxRequestLength="102400" executionTimeout="720" />
</system.web>

自MSDN解释:
httpRuntime是配置asp.net http运行时设置,以确定如何处理对asp.net应用程序的请求。
executionTimeout:表示允许执行请求的最大时间限制,单位为秒
maxRequestLength:指示 ASP.NET 支持的最大文件上载大小。该限制可用于防止因用户将大量文件传递到该服务器而导致的拒绝服务攻击。指定的大小以 KB 为单位。默认值为 4096 KB (4 MB)。
useFullyQualifiedRedirectUrl:表示指示客户端重定向是否是完全限定的(采用 "http://server/path" 格式,这是某些移动控件所必需的),或者指示是否代之以将相对重定向发送到客户端。如果为 True,则所有不是完全限定的重定向都将自动转换为完全限定的格式。false 是默认选项。
minFreeThreads:表示指定允许执行新请求的自由线程的最小数目。ASP.NET 为要求附加线程来完成其处理的请求而使指定数目的线程保持自由状态。默认值为 8。
minLocalRequestFreeThreads:表示ASP.NET 保持的允许执行新本地请求的自由线程的最小数目。该线程数目是为从本地主机传入的请求而保留的,以防某些请求在其处理期间发出对本地主机的子请求。这避免了可能的因递归重新进入 Web 服务器而导致的死锁。
appRequestQueueLimit:表示ASP.NET 将为应用程序排队的请求的最大数目。当没有足够的自由线程来处理请求时,将对请求进行排队。当队列超出了该设置中指定的限制时,将通过“503 - 服务器太忙”错误信息拒绝传入的请求。
enableVersionHeader:表示指定 ASP.NET 是否应输出版本标头。Microsoft Visual Studio 2005 使用该属性来确定当前使用的 ASP.NET 版本。对于生产环境,该属性不是必需的,可以禁用。

第二种方法:在代码中找到命令对象比如SqlCommand对象,给CommandTimeOut属性赋一个比较大的值。比如60秒,SqlCommand缺省超时设定是30秒。也可以将sqlcommand的timeout属性设为0。

SqlCommand cmd=new SqlCommand();
cmd.CommandTimeout = 60;

SqlDataAdapter da= new SqlDataAdapter();
da.SelectCommand.CommandTimeout = 60;

针对我的客户的情况,发现导致这一问题的原因是一个存储过程执行时间过长,导致应用没有等到存储过程执行完成就超时了。我认为解决这个问题的根本方法是对存储过程以及业务逻辑的优化。但是由于应用已经上线很长时间了,对于业务来说应用还是可以满足需要的,相对的对SQL的优化也不是很迫切。所以我也只有采用指标的方法了。

我使用第一种方法,解决了应用遇到的这个问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值