我明白爲什麼代碼不能工作。我不明白是什麼技術原因造成的,所以我們沒有得到更明確的錯誤信息。爲什麼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