说明:
星空系统有很多地方有超时参数设置,如若碰到超时异常时,需要 首先考虑优化设计以及程序逻辑以达到超时要求之内,如若现实业务场景需要且已无法优化时才考虑适量调整超时设置以解决超时异常问题。
场景:
一、事务超时
现象:当报错的提示中有“事务超时”或“Transaction time out”字样时就说事务超时了。
说明:事务超时需要修改应用服务器上的服务器的配置,系统默认的事务超时时间是10分钟,如果客户数据量很大,然后一个事务里10分钟都处理不完的情况下就会报事务超时的错误了,这个时候就需要调整事务超时的时间。
(修改事务超时时间:http://blog.csdn.net/lazyleland/article/details/7988622)
设置:machine.config(默认应该在C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config中),比如设置为1个小时(可以满足绝大多数客户的使用):
<configuration>
<system.transactions>
<machineSettings maxTimeout="01:00:00" />
</system.transactions>
</configuration>
需要注意的是,system.transactions应该放在configSections节点之后,否则程序启动时会报“无法识别的配置节 system.transactions”。
修改后配置如下图红框所示:
注意:如果有多台应用服务器,则每台都要做相同的配置修改处理。修改后要重启iis。
二、数据库超时
现象:数据库超时一般出现下面几种错误返回:
1. System.InvalidOperationException: 超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。
2. 在向服务器发送请求时发生传输级错误。 (provider: TCP Provider, error: 0 - 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作。)
3. 已成功与服务器建立连接,但是在登录前的握手期间发生错误。 (provider: SSL Provider, error: 0 - 等待的操作过时。) ---> System.ComponentModel.Win32Exception (0x80004005): 等待的操作过时。
4. 在从服务器接收结果时发生传输级错误。 (provider: TCP Provider, error: 0 - 指定的网络名不再可用。) ---> System.ComponentModel.Win32Exception (0x80004005): 指定的网络名不再可用。
5. 连接超时时间已到。在登录后阶段超过了此超时时间。连接可能在等待服务器完成登录过程并响应时超时;或者在尝试创建多个活动连接时超时。
说明:星空数据库默认连接超时时间是30秒,也即一个sql命令执行如果超过30秒还没能执行完成就表示已超时了。如果客户的数据量大,在进行复杂的查询等操作时就很可能会超时。为了解决超时的问题可以调整webconfig文件的超时配置。
设置:在webconfig的appsettings中增加项(cloud安装目录website目录下):数值单位为秒。比如将数据库超时时间改为1800秒,也即30分钟:<add key="DbCommandTimeout" value="1800" />
注意:如果有多台应用服务器,则每台都要做相同的配置修改处理。修改后要重启iis。
三、客户端会话超时
现象:非异步调用时出现客户端会话超时,提示正在终止线程。
设置:修改 Web.config 中的 executionTimeout,默认300,也就是5分钟,比如改成1800秒,即30分钟。