加载4或5次简单的控制器操作后,我收到堆栈溢出异常。该Web应用程序正在Azure上运行,我能够转储异常信息,并且该问题似乎与依赖注入有关。
internal object GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)
{
if (_disposed)
{
ThrowHelper.ThrowObjectDisposedException(); --> this is executed
}
var realizedService = RealizedServices.GetOrAdd(serviceType, _createServiceAccessor);
_callback?.OnResolve(serviceType, serviceProviderEngineScope);
return realizedService.Invoke(serviceProviderEngineScope);
}
在计算机上运行Web应用程序没有问题,仅在PROD中失败。
这是我在Azure中捕获异常的方法:https://blogs.msdn.microsoft.com/benjaminperkins/2017/06/28/capture-a-stackoverflowexception-and-make-a-dump-0xc00000fd/
我在Visual Studio中打开转储,我可以识别出失败的代码行(如上所述),但我仍然不知道如何解决它。我的所有依赖关系都通过“作用域”生存期解决。
感谢您的任何帮助。
我终于解决了!我有一类具有20个依赖项的类,每个依赖项都有更多的依赖项,可能是4或5级。没有循环依赖关系,因为这在我的开发环境中运行良好。在我进行了重构并减少了依赖性之后,它工作得很好。
因为它在我的开发环境中可以正常运行,但在Azure App Service中不能正常运行,所以我认为在Azure中托管应用程序时可以定义的依赖项实例或级别存在一些限制。
这是我的解决方法:
1)查找失败的最简单情况。
2)注释掉所有缺陷,然后重试。正常,是关于依赖项的。
3)转储生产中的堆栈溢出异常,因为在开发环境中未发生此错误。
4)确认这是依赖项注入问题,并检查.NET Core源代码。
5)减少依赖实例和级别。
6)部署。如果不起作用,请转到(5)。如果有效,您再次感到高兴:)