我目前在我的 WCF 服务中遇到了这个问题。“在从池中获取连接之前经过的超时时间”
现在我明白了这个错误,我的问题是,使用 Ninject 在 WCF 服务中管理 Sql 连接的正确方法是什么。
我所做的就是这个。在绑定中我有
Bind<IConnectionFactory>().To<ConnectionFactory>().InScope(c => OperationContext.Current);
我的连接工厂看起来像这样。
public class ConnectionFactory : IConnectionFactory
{
private string connectionString = ConfigurationManager.ConnectionStrings["SqlConnection"].ConnectionString;
private SqlConnection sqlConnection;
public SqlConnection GetOpenConnection()
{
if (sqlConnection == null)
sqlConnection = new SqlConnection(connectionString);
if (sqlConnection.State != ConnectionState.Open)
sqlConnection.Open();
return sqlConnection;
}
public void CloseConnection()
{
sqlConnection.Close();
}
每当我需要 Sql 连接时,我都会通过这样的 IoC 容器调用它。
SqlConnection connection = IoC.Resolve<IConnectionFactory>().GetOpenConnection();
我的假设是,每当我处理相同的请求时,我都会从 Ninject 返回相同的连接,并且该请求生命周期内的所有连接调用都将获得相同的连接。基于错误,我假设这没有发生。有没有更好的方法来做到这一点?或者,对于带有 ninject 的 WCF 来说,什么是更好的连接管理范例?我觉得将连接工厂设为单例是错误的做法,但这只是我的直觉。
编辑:我想补充一点,我将连接注入到我的存储库中,就像这样
private readonly SqlConnection connection;
public RandomRepository(IConnectionFactory connectionFactory)
{
connection = connectionFactory.GetOpenConnection();
}