【发布时间】:2016-05-23 12:39:16
【问题描述】:
当 API 请求返回数据时,我使用 ServiceStack OrmLite 访问 AWS MySQL。有很多 MySql 连接处于睡眠状态。
结束请求时如何关闭这些数据库连接?
public object Get(GetCustomer request)
{
return Db.SingleById<Customer>(request.Id);
}
我在 IIS 中托管 API。
ServiceStack 和 ServiceStack.OrmLite 是 4.0.56
MySQL来自AWS RDS,数据库引擎版本为5.6.21
MySQL.Data 是 6.9.8
【问题讨论】:
-
您能否提供显示您如何使用 OrmLite 的代码?例如,来自
Service通过Db属性或通过IDbConnectionFactory等。 -
我使用了服务中的 Db 属性。像这样:
public object Get(GetCustomer request) { return Db.SingleById<Customer>(request.Id); }。我在IIS中托管了 API。 -
您能否提供您正在使用的ServiceStack 版本以及您正在连接的MySql 版本?更新问题可能是最简单的方法。
-
数据库连接应该已经在每个请求结束时被处理掉了。你的连接字符串是什么样的(没有密码),你可能启用了连接池或其他东西。
-
我知道在我的 MSSQL 连接中,我有连接池,并且由于每个新请求都保留了一个连接,并且池已满,所以我一直在连接失败。虽然 ServiceStack 中的
Service.Dispose基本实现确实检查并处理了Db连接,但我无法保证何时会发生(GC 收集)。我最终在我的 AppHost 中实现了OnPostExecuteServiceFilter,以提前强制关闭数据库连接并防止数据库连接错误。
标签: mysql connection servicestack