ABP 框架 底层提供商未能打开(the underlying provider failed on open)

蘋果虫 2018-01-04 05:05:54
公司最近使用ABP 框架 开发项目,遇到这个问题,一直困扰着我,
底层提供商未能打开(the underlying provider failed on open),
有用到过EF
项目是C/S结构的,有六台电脑,五台都能正常运行,唯独有一台运行不起来,报错:the underlying provider failed on open。
数据库连接的都是同一台服务器,服务器和客户端六台电脑都配置好MSDTC的。

异常信息:The transaction has aborted.
System.Transactions.TransactionAbortedException: The transaction has aborted.
at System.Transactions.TransactionStateAborted.BeginCommit(InternalTransaction tx, Boolean asyncCommit, AsyncCallback asyncCallback, Object asyncState)
at System.Transactions.CommittableTransaction.Commit()
at System.Transactions.TransactionScope.InternalDispose()
at System.Transactions.TransactionScope.Dispose()
at Abp.EntityFramework.Uow.TransactionScopeEfTransactionStrategy.Commit()
at Abp.EntityFramework.Uow.EfUnitOfWork.CompleteUow()
at Abp.Domain.Uow.UnitOfWorkBase.Complete()
at Abp.Domain.Uow.UnitOfWorkInterceptor.PerformSyncUow(IInvocation invocation, UnitOfWorkOptions options)
at Abp.Domain.Uow.UnitOfWorkInterceptor.PerformUow(IInvocation invocation, UnitOfWorkOptions options)
at Abp.Domain.Uow.UnitOfWorkInterceptor.Intercept(IInvocation invocation)
at Castle.DynamicProxy.AbstractInvocation.Proceed()
at Abp.Auditing.AuditingInterceptor.Intercept(IInvocation invocation)
at Castle.DynamicProxy.AbstractInvocation.Proceed()
at Abp.Runtime.Validation.Interception.ValidationInterceptor.Intercept(IInvocation invocation)
at Castle.DynamicProxy.AbstractInvocation.Proceed()
at Castle.Proxies.LoginAppServiceProxy.GetLoginMachineInfo(String MAC, Int32 MachineTypeID)
at HKManage.NewRcGMS.FrmGMSLoading.RunCheck(String& strPayType)
at HKManage.NewRcGMS.FrmGMSLoading.CheckStart()

...全文
1622 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
蘋果虫 2018-01-23
  • 打赏
  • 举报
回复
谢谢大家的回答,问题已解决!!!
蘋果虫 2018-01-19
  • 打赏
  • 举报
回复
引用 16 楼 From_TaiWan 的回复:
佩服lz锲而不舍的精神和敬业精神! [quote=引用 11 楼 luofang11 的回复:] 网络问题不存在,之前那台运行不了的机器,今天可以运行了,但另一台机器又运行不了,还是报同样的问题,而现在这台运行不了的机器,之前是可以运行的
引用 1 楼 From_TaiWan 的回复:
首先确定下是不是客户机的原因? 只是固定的某台机子出问题,还是都有可能 二、如果出问题的客户机,说不定是哪台,而且还很随机,说不定哪时就发生了,这说明是系统以及处理业务的问题
你再测试下,如果是更多的机子访问,如7台,8台...,会不会出问题 现在问题定位到SqlQuery(),大约是程序问题了 这个方法里是linq吗,还是? 从优化角度考虑下 我2#写的,不知道lz逐条试了没有 部分机子能运行,说明大致是“处理规模”的问题 谢谢大神的提醒,Timeout大小已设置过,太小是远行不起来,但值已设置到了999999999999,已路过了之前报错的部分方法, 但还是有方法报The underlying provider failed on Open 如:token=_tokenRepository.FirstOrDefault(p=>p.ID=ID);
秋的红果实 2018-01-18
  • 打赏
  • 举报
回复
佩服lz锲而不舍的精神和敬业精神!
引用 11 楼 luofang11 的回复:
网络问题不存在,之前那台运行不了的机器,今天可以运行了,但另一台机器又运行不了,还是报同样的问题,而现在这台运行不了的机器,之前是可以运行的
引用 1 楼 From_TaiWan 的回复:
首先确定下是不是客户机的原因? 只是固定的某台机子出问题,还是都有可能 二、如果出问题的客户机,说不定是哪台,而且还很随机,说不定哪时就发生了,这说明是系统以及处理业务的问题
你再测试下,如果是更多的机子访问,如7台,8台...,会不会出问题 现在问题定位到SqlQuery(),大约是程序问题了 这个方法里是linq吗,还是? 从优化角度考虑下 我2#写的,不知道lz逐条试了没有 部分机子能运行,说明大致是“处理规模”的问题 ------------------------------\0
蘋果虫 2018-01-18
  • 打赏
  • 举报
回复
_tokenRepository报错
蘋果虫 2018-01-18
  • 打赏
  • 举报
回复
Mac2222222222 Mac3333333333 之间报The underlying provider failed on Open
蘋果虫 2018-01-17
  • 打赏
  • 举报
回复
找到问题的出现的所在点, _Contet.GetDbContext().Database.SqlQuery(), 是这个地方报错“the underlying provider failed on open” 如果_Contet.GetDbContext()为空怎么重新实例化呢?
xinbada1985 2018-01-16
  • 打赏
  • 举报
回复
现在五台机器可以运行,只有一台机器不好用,就能得出一个结论,你的代码本身是没有问题的,问题在于电脑的环境可能不一致,是否都是一样的系统,系统中是否少安装了某些插件!版本是否一致!特别是电脑的系统不同,可能兼容的东西也会不同!
xinbada1985 2018-01-16
  • 打赏
  • 举报
回复
再有就是排查网络问题,网络是否通畅,是否有某些防火墙之类的阻断!
蘋果虫 2018-01-16
  • 打赏
  • 举报
回复
很奇怪,拿个笔记本调试,完全没问题,但是把笔记本电脑上编译的文件,放在以前运行不起来的电脑上运行,还是不行
xinbada1985 2018-01-16
  • 打赏
  • 举报
回复
连接数问题吧!你看看是不是只能保持5台机器同时使用,多了就会报错!
蘋果虫 2018-01-16
  • 打赏
  • 举报
回复
网络问题不存在,之前那台运行不了的机器,今天可以运行了,但另一台机器又运行不了,还是报同样的问题,而现在这台运行不了的机器,之前是可以运行的
秋的红果实 2018-01-07
  • 打赏
  • 举报
回复
引用 5 楼 luofang11 的回复:
[quote=引用 3 楼 秋的红果实的回复:]将timeout逐步往大设置,如果达到一定程度,不出现问题了,说明是因为资源竞争引起的 还补充一点,出问题的客户机,IP地址要固定IP,不要自动获取
防火墙巳关闭的,IP固定的,连接串也改了的,就是不行[/quote]我2#写的2),3)测试没? 2)说的是让事务的timeout大于命令的timeout,根据你写的语句修改测试下
yzf86211861 2018-01-06
  • 打赏
  • 举报
回复
重装系统下 试试。
蘋果虫 2018-01-05
  • 打赏
  • 举报
回复
引用 3 楼 秋的红果实的回复:
将timeout逐步往大设置,如果达到一定程度,不出现问题了,说明是因为资源竞争引起的 还补充一点,出问题的客户机,IP地址要固定IP,不要自动获取
防火墙巳关闭的,IP固定的,连接串也改了的,就是不行
健者天行 2018-01-04
  • 打赏
  • 举报
回复
找供应商啊 .
秋的红果实 2018-01-04
  • 打赏
  • 举报
回复
将timeout逐步往大设置,如果达到一定程度,不出现问题了,说明是因为资源竞争引起的 还补充一点,出问题的客户机,IP地址要固定IP,不要自动获取
秋的红果实 2018-01-04
  • 打赏
  • 举报
回复
二、。。。。。。。。。 1)增加数据库服务器的连接池最大数,以及增加超时时间。例如:在连接字符串,server=...;pooling=true;min pool size=5000;max pool size=30000;timeout=3000;......,意思就是往大弄,具体数值自己考虑。 2)设置事务timeout时间大于command的timeout,你事务应该用的是TransactionScope类吧,例如 new TransactionScope(TransactionScopeOption.Required, TimeSpan.FromSeconds(600)) currentContext.CommandTimeout = 300; 3)查看sql上的日志,看看具体发生了什么 从exception看,是事务被迫中断,应该是因为连接中断引起的,这点,在1)里面,将timeout逐步往大设置,看看结果如何
秋的红果实 2018-01-04
  • 打赏
  • 举报
回复
首先确定下是不是客户机的原因? 只是固定的某台机子出问题,还是都有可能 一、如果是固定的某台,那么 1)检查这台的防火墙(不是服务器的),是不是影响了通讯,主要是指能否进入本机(入站规则)。具体可以在入站规则里面,添加本机(客户机的)和服务器通讯的端口号 2)检查网段,是否可以ping通(双方的) 3)检查第三方监控软件,是否影响通讯 4)苦力活儿,和运行正常的客户机进行对比,找出那些不同的东西,逐个排除 二、如果出问题的客户机,说不定是哪台,而且还很随机,说不定哪时就发生了,这说明是系统以及处理业务的问题

110,536

社区成员

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

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

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