在Mono和Ubuntu 14.04上使用ASP.NET 5时出现NullReferenceException崩溃

本文关键字:5时 NET ASP 崩溃 NullReferenceException Mono Ubuntu | 更新日期: 2023-09-27 18:27:19

我们有一个在Mono和Ubuntu14.04上的ASP.NET 5上运行的REST API。我们使用Mono是因为我们需要PostgreSQL数据库的NpgSQL驱动程序。

有一个网络服务器定期向这个API发布数据,还有一个网站可以从这个API检索数据。

一开始我们使用Mono 4.2.1,但我们一天中多次出现NullReferenceException。所以我们回到了Mono 4.0.5.1,因为这篇文章说Mono 4.2.1有缺陷。

然而,我们仍然每天都会得到一次例外。完整的例外情况如下所示:

Unhandled Exception:
System.NullReferenceException: Object reference not set to an instance of an object
  at System.Threading.EventWaitHandle.Reset () [0x00000] in <filename unknown>:0 
  at (wrapper remoting-invoke-with-check) System.Threading.EventWaitHandle:Reset ()
  at System.Threading.Timer+Scheduler.SchedulerThread () [0x00000] in <filename unknown>:0 
  at System.Threading.Thread.StartInternal () [0x00000] in <filename unknown>:0 
[ERROR] FATAL UNHANDLED EXCEPTION: System.NullReferenceException: Object reference not set to an instance of an object
  at System.Threading.EventWaitHandle.Reset () [0x00000] in <filename unknown>:0 
  at (wrapper remoting-invoke-with-check) System.Threading.EventWaitHandle:Reset ()
  at System.Threading.Timer+Scheduler.SchedulerThread () [0x00000] in <filename unknown>:0 
  at System.Threading.Thread.StartInternal () [0x00000] in <filename unknown>:0 

因为这个异常仍然出现在这个旧版本的Mono上,我想它也可能出现在ASP.NET 5中。这似乎是框架本身的一个问题,因为它在System.Threading包中。

有人知道这是什么吗?是什么原因造成的?

在Mono和Ubuntu 14.04上使用ASP.NET 5时出现NullReferenceException崩溃

看起来像xamarin/mono上的这个bug。我在使用Timer时遇到了同样的问题。我正在考虑从mono迁移到coreclr(我在这个特定的项目中不使用SQL,但是Npgsql在alpha构建中可以在coreclr上使用)。

我还将研究在Timer上移动到Task是否是一个解决方案。

更新

这篇文章和其他一些文章表明,linux内核中的线程问题已经修复,这意味着更新内核是一个可能的解决方案。不幸的是,这对我来说不起作用,因为我使用的是AWS EC2 HVM实例。我试着把Timer换成Task,但这也不能解决问题。

我使用的是SignlR.NET客户端,它与dnxcore50不兼容,所以这阻止了我访问coreclr。如果我在这方面有任何进展,我会更新这个问题。

更新2-已解决

我把我的AWS AMI切换到了Ubuntu,升级了内核,不再出现这个错误。我使用这个过程将内核更新为3.19.0-41-generic。上面原始的xamarin错误引用了这一点,表明它需要至少为3.13.0-65