Nhibernate 连接数据库问题(查了一星期了也没有找到原因)
使用Nhibernate连接数据库(阿里数据库),能连接上数据库,就是连接的时间长后,就会报错,错误如下:[i][/i]
System.Data.SqlClient.SqlException (0x80131904): A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: SSL Provider, error: 0 - 等待的操作过时。) ---> System.ComponentModel.Win32Exception (0x80004005): 等待的操作过时。
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.Open()
at NHibernate.Connection.DriverConnectionProvider.GetConnection()
at NHibernate.AdoNet.ConnectionManager.GetConnection()
at EPS.Bpm.Data.NH.NHDbContextFactory.GetContext() in e:\EPS.Expense\trunk\EP.BPM\Code\工作流引擎\工作流预算分支V1.0\EPS.Bpm.Data.NHibernate\NHDbContextFactory.cs:line 61
代码如下:
public ISession GetContext()
{
if (factory.IsClosed)
{
factory = cfg.BuildSessionFactory();
session = factory.OpenSession();
}
if (!session.IsOpen)
{
session = factory.OpenSession();
}
if (!session.IsConnected)
{
session.Reconnect();
}
if (session.Connection.State ==
System.Data.ConnectionState.Broken
|| session.Connection.State == System.Data.ConnectionState.Closed)
{
session.Connection.Open();
}
return session;
}
/// 调用方
protected ISession Db
{
get
{
try
{
return NHDbFactory.GetContext();
}
catch (Exception ex)
{
LogWriter.D("error", "获取protected ISession Db属性抛异常,重新创建..." + ex.ToString());
LogWriter.D("error", "二次获取session...");
return NHDbFactory.GetContext();
}
}
}
代码本身没问题,但是就是运行时间长后,会报错误,就是上面的错误:
翻译过来是这个意思:
Stask.DATA SqLclit.SqExExcor(0x8013804):与服务器成功建立了连接,但在预登录握手期间发生了错误。(提供程序:SSL提供程序,错误:0 - Stand)