Nhibernate 连接数据库问题(查了一星期了也没有找到原因)

Java_And_NET 2018-05-18 04:45:13
使用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)
...全文
882 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Java_And_NET 2018-05-21
  • 打赏
  • 举报
回复
Nhibernate中的session 频繁关闭打开是不是会影响效率,因为这个是个工作流引擎服务,同时处理二百个消息,是否会影响?
Java_And_NET 2018-05-21
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
DBConnection 要尽快释放。
这个是个工作流引擎,这个连接对象会经常用,所以没有关闭。是个全局的对象
Java_And_NET 2018-05-21
  • 打赏
  • 举报
回复
引用 2 楼 serf 的回复:
1.把客户端和服务器解除防火墙和杀毒软件,确保所有网络端口可用。 2.确认用户密码是否正确。
跟这个没有关系
nry19871012 2018-05-20
  • 打赏
  • 举报
回复
访问数据后要尽快关闭连接。如果不关闭连接,长时间没有数据交互,数据库会自动断开连接。也可以设置在数据库中设置不断开连接。
  • 打赏
  • 举报
回复
DBConnection 要尽快释放。
serf 2018-05-18
  • 打赏
  • 举报
回复
1.把客户端和服务器解除防火墙和杀毒软件,确保所有网络端口可用。 2.确认用户密码是否正确。
Java_And_NET 2018-05-18
  • 打赏
  • 举报
回复
怎么没有人回复,这个问题很弱智吗?

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧