我遇到以下问题:
有些用户在尝试使用我的网络应用时抱怨:
我遇到的错误是:
IP: System.Web.HttpApplicationState
Agent: IE8
AgentDtails : Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2)
Refrer: https://xxxxxxxxxxxxxxxxxx.aspx?guid=cb083ebc-d1a8-49ff-b00d-acf208dd67ac
Plateform: WinXP
05/09/2013 09:20:37
Error in: https://xxxxxxxxxxxxxxxxxx.aspx?guid=cb083ebc-d1a8-49ff-b00d-acf208dd67ac
Error Message:
Error Message: Thread was being aborted.
有时候:
Error Message:ERROR [08S01] [Informix .NET provider]Communication link failure.
Error Code: -11020
MEssage: [Informix .NET provider]Communication link failure.
这些错误不是来自特定页面或方法。我会不时地从不同的页面随机获取这些错误!!
我的连接字符串是:
<add key="connection" value="User Id=XXX;Password=XXXX;Host=aa1;Server=st1;Service=st1;Database=doc; Client Locale=ar_ae.1256; Database Locale=ar_ae.8859-6; Protocol=olsoctcp;pooling=true;Min Pool Size=4;Max Pool Size=200;"/>
答案 0 :(得分:3)
我看到你使用了池。它提高了性能,因为您确实需要将do DB与每个HTTP请求连接起来,但这样的池必须容易出错。如果您的环境中的某些东西(路由器,防火墙)认为数据库服务器和数据库池之间的长期和非活动连接确实已经死亡并且可以断开连接,则会出现问题。然后你尝试使用这样的连接,db pool认为这样的连接是好的和可用的,但是它已经关闭并且不可用。
如何防止此类错误取决于池。某些池有特殊查询来检查连接是否存在。您将只获得成功检查的连接。某些池具有超时时间,如果此时未使用连接,则会释放它。您必须阅读有关您使用的池的更多信息并进行配置。您没有显示您使用的.NET客户端版本。在版本3.70的“IBM Informix .NET Provider Reference Guide”中,我发现:
您使用池化,最大池大小,连接生命周期和最小池大小 用于控制连接池的连接字符串属性。
Idle Timeout内部参数是用于删除的标准协议 来自池的连接并防止连接保持活动状态 无限期地在服务器中。空闲超时的值为120秒,但不能 通过在连接字符串中设置新值来更改。随着空闲超时,何时 连接池中未使用的连接超过120秒, 连接已关闭并从池中删除。
对我来说2分钟是好的,但也许您使用其他版本的客户端进行不同的设置?