问题标签 [system.transactions]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - System.Transactions 中的未处理异常在网络不稳定期间停止 Windows 服务
NServiceBus.Host.exe
我们正在使用主机进程运行基于 NServiceBus 的服务。
在过去的几个月里,Windows 服务在生产中两次突然停止,在应用程序事件日志中留下以下事件:
应用程序:NServiceBus.Host.exe 框架版本:v4.0.30319 描述:进程因未处理的异常而终止。异常信息: System.InvalidOperationException 堆栈:在 System.Transactions.Transactions.Phase0VolatileDemultiplexer.InternalPrepare() 的 System.Transactions.TransactionState.ChangeStatePromotedPhase0(System.Transactions.InternalTransaction) 在 System.Transactions.VolatileDemultiplexer.PoolablePrepare(System.Object) 在 System.Transactions .Oletx.OletxVolatileEnlistment.Prepare(System.Transactions.Oletx.OletxVolatileEnlistmentContainer) 在 System.Transactions.Oletx.OletxPhase0VolatileEnlistmentContainer.Phase0Request(Boolean) 在 System.Transactions.Oletx.OletxTransactionManager.ShimNotificationCallback(System.Object, Boolean) 在 System.Threading。 _ThreadPoolWaitOrTimerCallback。
我们在几分钟的网络不稳定期间收到此错误(例如,对数据库的大量超时,这在我们的 log4net 日志文件中可见)
关于这里失败的任何想法?
我们在 log4net 日志文件中没有看到致命错误。
版本:
- 视窗服务器 2008 R2
- .NET 框架 4.5.2
- NServiceBus 4.7.5
- NHibernate 3.3.3.4001(用于 saga、订阅和超时持久化)
- SQL Server 2012
.net - 为什么跨 AppDomain 调用后 Transaction.Current 变为 null?
考虑下面的小程序,它简单地创建一个TransactionScope
prints Transaction.Current
,调用另一个 AppDomain 中的一个方法(执行需要一段时间),然后Transaction.Current
在返回时打印。
出乎意料的是,该程序生成以下输出:
如果我TransactionScopeAsyncFlowOption
将 ctor 中的更改TransactionScope
为TransactionScopeAsyncFlowOption.Suppress
,则事务在调用后仍然存在。
我的怀疑是跨逻辑上下文的事务范围流由 CallContext 处理,它在远程调用中传播,并且使用的键继承MarshalByRefObject
,并且由于它们没有注册 any ISponsor
,代理将在初始租用时间后断开连接。然后,一旦我们从调用返回,逻辑调用上下文就会与原始上下文合并,这意味着事务不再存在。
我正在寻找一种方法来规避这个问题,如果这被认为是.NET 中的一个错误?
visual-studio-2017 - 错误 CS0234 命名空间“系统”中不存在类型或命名空间名称“事务”(您是否缺少程序集引用?)
我刚刚从 VS2015 升级到 VS2017 Professional,我在 VS2015 上构建良好的解决方案现在无法在 VS2017 上构建,并出现以下错误:
错误 CS0234:命名空间“System”中不存在类型或命名空间名称“Transactions”(您是否缺少程序集引用?)
查看 System.Transactions 的参考,它指向正确的位置
有没有人解决过这个问题?
c# - 调用 Transaction.Current 时出现 InvalidOperationException
我的 DatabaseClient 类中有代码,通过检查 ThreadStatic 属性 Transaction.Current 检查是否存在活动的 TransactionScope:
我有使用这个类的代码,它创建一个 TransactionScope,执行两个数据库操作,然后完成它。然后应用程序继续进行进一步的数据库工作。但是现在当它调用上面的代码时,我得到了一个异常:
为了“重置”当前事务,我需要做什么才能再次安全地检查 Transaction.Current?
c# - 如何验证 TransactionScope 是否适用于 MySQL?
我想添加读取未提交的隔离级别。我知道可以使用 SQL 语句。但我想尝试使用 TransactionScope,但我尝试了但没有在 MySQL 常规日志上获得任何隔离语句。问题 1 transactionscope 类是否适用于 MySQL。如果是,那么如何验证。
c# - .NET 事务、Mongo DB、2 阶段提交与单阶段提交
我们正在将 Mongo DB 集成为我们基于 .NET 的系统中的数据库。由于我们的系统需要数据一致性,所以我们需要支持事务。Mongo DB v4.0 支持事务,但为了将其与 .NET System.Transaction 机制集成,似乎我们需要为 Mongo 实现一个资源管理器,具有单阶段 (IPromotableSinglePhaseNotification) 或两阶段 (IEnlistNotification)犯罪。
- Mongo C# 驱动程序公开了一个 StartTransaction()、Commit() 和 Rollback() API,它看起来像一个单阶段提交 API,所以看起来我们的资源管理器应该实现单阶段接口。另一方面,我们需要支持分布式事务,所以这适合 2-phase-commit 机制,但是在这种情况下,第一阶段(Prepare)的实现应该是什么?
- 如果有多个 Mongo 事务参与者(例如分布式事务),如果其中一个参与者在 Mongo 驱动程序的 Commit() API 上失败,会发生什么?我应该如何处理所有之前已经承诺的参与者?
c# - 源自“System.Transactions.JitSafeGetContextTransaction”的“无法转换”异常?
就在最近,我的应用程序一直不一致地抛出各种异常,例如:
(最后一个可能是其他的次要效果)
其中一些的堆栈跟踪粘贴在下面,但请注意,它们都具有以下 3 个最后步骤:
观察 - 这些例外:
- 经常发生,但不是一直发生(50%?)
- 当确实发生时不要总是产生相同的异常
- 与我的应用程序中导致它们的代码没有明显的联系
- 可在各种 PC 上重现
- 在我所做的任何搜索中都无法准确找到
该应用程序是一组通过 COM 从旧 VB6 代码调用的 C# DLL。然而,这已经存在多年,我们最近没有改变任何关于如何完成的事情。
它不是一个多线程的应用程序,所以涉及的演员表System.Threading.Thread
似乎不合适。有一个第三方模块使用了线程,但我们把它作为实验拿出来:这样做并没有解决问题,但似乎减少了错误的频率。这使我认为这是某种资源破坏问题。
我正在寻找建议,例如:
如果您以前确实见过这种异常模式,那么原因是什么?
关于如何调试根本问题的建议
示例堆栈跟踪:
和
和
编辑:
我尝试使用 windbg(使用托管代码的 SOS 扩展)对此进行调查。
它能够打破异常。这是从那时起的堆栈跟踪:
这与上面的 CLR 异常堆栈同步。
我主要想确定的是是否存在堆“腐败”。但显然不是:
所以我认为这排除了我们的任何本机代码(或第 3 方)只会造成严重破坏。但是仍然没有真正理解这个问题。在我看来,它更像是数据库层中的一个错误。
这已在此处作为问题提交:https ://developercommunity2.visualstudio.com/t/Unable-to-cast-object-of-type-varies/1241378