在过去的一年中,我有一个通过连接的Azure SQL数据库托管在应用程序服务上的应用程序。就在过去的一周中,我们在处理响应时遇到了许多问题,这表明我们的异步代码有些脆弱。没有部署相关的新代码。我怀疑这涉及到我们应用程序的一部分,可能是数据库,直到请求处理之前才被分配。
我们的堆栈涉及在Kestrel上使用ASP.Net Core 2.0应用程序,将用户导航到Razor Page,然后实例化用于(本质上)游戏的websocket连接。这是一个整体。这全都在于部署到一个实例的一个项目中。
最近的问题涉及此错误:
System.NullReferenceException: Object reference not set to an instance of an object.
at Microsoft.AspNetCore.Routing.Tree.TreeRouter.<RouteAsync>d__13.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at Microsoft.AspNetCore.Routing.RouteCollection.<RouteAsync>d__9.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.AspNetCore.Builder.RouterMiddleware.<Invoke>d__4.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.AspNetCore.Builder.Extensions.MapMiddleware.<Invoke>d__3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.<Invoke>d__6.MoveNext()
我们的App服务最终出现在重启循环中,此异常是唯一的错误,重复出现。以前在日志中,在200毫秒内处理的请求数量不合理,这使我认为这些请求实际上是同时被保留和处理的。否则,时代就没有意义了。
在此期间,该应用程序无法使用,直到我手动重新启动应用程序服务为止,此后没有任何问题。事实证明,该错误很难重现。
对这些问题有任何见解,以及如何使应用程序服务及其数据库始终保持打开状态,或者该错误可能与什么有关?