1

我面临以下问题:

一些用户在尝试我的 Web 应用程序时抱怨:

我遇到的错误是:

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;"/>
4

1 回答 1

3

我看到你使用池。它提高了性能,因为您确实需要将 do DB 与每个 HTTP 请求连接起来,但这样的池必须容易出错。如果您的环境中的某些东西(路由器、防火墙)认为数据库服务器和数据库池之间的长期和非活动连接真的死了并且可以断开连接,那么就会出现问题。然后你尝试使用这样的连接,db pool 认为这样的连接是好的并且可用的,但是它被关闭并且不可用。

如何防止此类错误取决于池。一些池有特殊的查询来检查连接是否存在。您将仅获得已成功检查的连接。一些池有超时时间,如果在该时间未使用连接,则将其释放。您将不得不阅读有关您使用和配置它的池的更多信息。您没有显示您使用的 .NET 客户端版本。在版本 3.70 的“IBM Informix .NET Provider Reference Guide”中,我发现:

您可以使用 Pooling、Max Pool Size、Connection Life Time 和 Min Pool Size 连接字符串属性来控制连接池。

Idle Timeout 内部参数是用于从池中删除连接并防止连接在服务器中无限期保持活动状态的标准协议。Idle Timeout 的值为 120 秒,不能通过在连接字符串中设置新值来更改。使用空闲超时,当连接池中的连接超过 120 秒未使用时,连接将关闭并从池中删除。

对我来说 2 分钟很好,但也许您使用具有不同设置的其他版本的客户端?

于 2013-05-09T12:41:21.553 回答