我明白为什么代码不能工作。我不明白是什么技术原因造成的,所以我们没有得到更明确的错误信息。为什么IIS在循环构造函数中给出了广泛的“502.3 - Bad Gateway”错误
在开发netcore2应用程序时,我最终使用构造函数进行循环引用。我的意思是类A的构造函数实例化了另一个类型为B的对象,它本身会实例化一个类型为A的对象等等。
这是一个简单的代码片段,用于重现圆形实例化,该实例在online compiler上引发StackOverflowException
我做了这个例子。
public class A
{
public A()
{
var b = new B();
}
}
public class B
{
public B()
{
var b = new B();
}
}
public class Program
{
public static void Main(string[] args)
{
var a = new A();
}
}
令人惊讶,而不是一个计算器例外它是一个502.3 - Bad Gateway
错误IIS给我的应用程序崩溃,这并没有给有关基本问题的大量信息之前。我期望这样的循环调用可以轻松地检测到它不仅被编译器捕获,而且甚至可以被VisualStudio 2017或Resharper最终指出,但没有任何警告我。
this article以及this one似乎表明问题可能是暂停,但似乎不大可能,因为应用程序在两秒钟内崩溃。
我简直不明白为什么没有CircularConstructionException
- 这听起来很容易实现,甚至更糟糕的是,为什么IIS没有像联机编译器那样抛出常规StackOverflowException
?
502.3也不例外。实际的异常很可能是StackOverflowException。 502.3甚至可能不是来自IIS--它可能来自您和IIS之间的代理。 –
我不知道它是否重要,但这是在本地,在调试模式。对于抛出的其他异常,我会得到一个包含详细信息的异常页面。为什么在这种情况下只能隐藏异常?我有点理解为什么应用程序崩溃(无法摆脱循环),但为什么是StackOverflow或任何异常实际上是由IIS在调试模式下隐藏的? – Wndrr