なぜコードが動作しないのかわかります。私は技術的な理由がそれを作るのか分かりませんので、より明示的なエラーメッセージが出ません。なぜIISが循環コンストラクタで "502.3 - Bad Gateway"エラーを返すのですか
netcore2アプリケーションを開発しているうちに、コンストラクタを使用して循環参照を作成しました。私は、クラスAのコンストラクタが、タイプAのオブジェクトをインスタンス化するなど、タイプBの他のオブジェクトをインスタンス化することを意味します。
ここには、その例を作成した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();
}
}
驚くべきことに、代わりにstackoverflowの例外のそれは根本的な問題についての多くの情報が得られない、IIS、右のアプリケーションがクラッシュする前に、私を与えること502.3 - Bad Gateway
エラーです。私はこのような循環呼び出しが、コンパイラによって捕捉されるだけでなく、VisualStudio 2017またはResharperの究極のピンポイントでも検出できるほど簡単なパターンであると期待していましたが、何も警告しませんでした。
this articleなどthis one問題がタイムアウトすることができたことを示すように見えるが、アプリケーションが2秒の下でクラッシュするので、それは考えにくいです。
私は単純になぜCircularConstructionException
が理解できないのですか?これは実装が簡単で、さらに悪くても、IISがオンラインコンパイラのように普通のStackOverflowException
を投げないのはなぜですか?
502.3も例外ではありません。実際の例外は、StackOverflowExceptionである可能性があります。 502.3はIISからのものではないかもしれません。あなたとIISの間のプロキシから来ている可能性があります。 –
問題があるかどうかわかりませんが、これはデバッグモードではローカルにあります。スローされたすべての他の例外について、私は詳細の例外ページを取得します。なぜこのケースでは例外が隠されているのですか?私はアプリのクラッシュ(ループから抜ける方法)がなぜStackOverflowなのか、それともデバッグモードになっている間に実際にスローされた例外がIISによって隠されているのか理解できますか? – Wndrr