gpt4 book ai didi

c# - System.Transactions 中未处理的异常在网络不稳定期间停止 Windows 服务

转载 作者:行者123 更新时间:2023-11-30 12:42:53 25 4
gpt4 key购买 nike

我们正在使用 NServiceBus.Host.exe 主机进程运行基于 NServiceBus 的服务。

在过去几个月中,Windows 服务在生产中两次突然停止,在应用程序事件日志中留下以下事件:

Application: NServiceBus.Host.exe Framework Version: v4.0.30319 Description: The process was terminated due to an unhandled exception. Exception Info: System.InvalidOperationException Stack: at System.Transactions.TransactionState.ChangeStatePromotedPhase0(System.Transactions.InternalTransaction) at System.Transactions.Phase0VolatileDemultiplexer.InternalPrepare() at System.Transactions.VolatileDemultiplexer.PoolablePrepare(System.Object) at System.Transactions.Oletx.OletxVolatileEnlistment.Prepare(System.Transactions.Oletx.OletxVolatileEnlistmentContainer) at System.Transactions.Oletx.OletxPhase0VolatileEnlistmentContainer.Phase0Request(Boolean) at System.Transactions.Oletx.OletxTransactionManager.ShimNotificationCallback(System.Object, Boolean) at System.Threading._ThreadPoolWaitOrTimerCallback.PerformWaitOrTimerCallback(System.Object, Boolean)

我们在网络不稳定的几分钟内遇到了这个错误(例如,很多数据库超时,这在我们的 log4net 日志文件中可见)

关于这里失败的原因有什么想法吗?

我们在 log4net 日志文件中没有发现 fatal error 。

版本:

  • window 服务器 2008 R2
  • .NET Framework 4.5.2
  • NServiceBus 4.7.5
  • NHibernate 3.3.3.4001(用于 saga、订阅和超时保持器)
  • SQL Server 2012

最佳答案

您看到的行为似乎与 NHibernate 如何处理 TransactionCompleted 有关事件。这个问题也是莫名其妙related to this question .

AdoNetWithDistributedTransactionFactory 在 TransactionCompleted 事件上注册了一个匿名委托(delegate)。使用 ThreadPool.QueueUserWorkItem 在后台线程上触发此事件。如果该操作由于与数据库服务器的连接问题(即由于网络分区)而引发异常,则此异常将作为 AppDomain 上未观察到的异常引发。 UnhandledExceptions 会破坏 AppDomain,因此也会破坏 NServiceBus.Host。

最好的解决方法是在当前 AppDomain 上注册一个 UnhandledException 处理程序,如下所示

AppDomain.CurrentDomain.UnhandledException += OnUnhandledException

private static void OnUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
LogManager.GetLogger(typeof(AppDomain)).Fatal(“Unhandled exception”, e.ExceptionObject as Exception);
}

更多信息 see

当这解决了中间问题时,结合 NHibernate 找到数据库服务器连接问题的根本原因就有意义了

关于c# - System.Transactions 中未处理的异常在网络不稳定期间停止 Windows 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32563804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com