AyendeのRacoonブログのソースを見ている間、私はこれを見ましたglobal.asax.cs
:
// Work around nasty .NET framework bug
try
{
new Uri("http://fail/first/time?only=%2bplus");
}
catch (Exception)
{
}
これは、最初のリクエストで発生するバグの回避策のようです。誰かがバグが何であるか、またはそれを再現する方法を知っていますか?
AyendeのRacoonブログのソースを見ている間、私はこれを見ましたglobal.asax.cs
:
// Work around nasty .NET framework bug
try
{
new Uri("http://fail/first/time?only=%2bplus");
}
catch (Exception)
{
}
これは、最初のリクエストで発生するバグの回避策のようです。誰かがバグが何であるか、またはそれを再現する方法を知っていますか?
2010年3月からのこのAyendeブログ投稿に少しグーグルが入り、そこから抜粋を引用します。
私は今これを再現することができます、ここでそれがどのようにそこに到達したか:
public class Strange : MarshalByRefObject { public void WTF() { Console.WriteLine(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile); new Uri("http://localhost:58080/indexes/categoriesByName?query=CategoryName%3ABeverages&start=0&pageSize=25"); } } public class Program { private static void Main() { var instanceAndUnwrap = (Strange) AppDomain.CreateDomain("test", null, new AppDomainSetup { ConfigurationFile = "" }).CreateInstanceAndUnwrap("ConsoleApplication5", "ConsoleApplication5.Strange"); instanceAndUnwrap.WTF(); } }
それを理解するのに少し時間がかかりました。
以下のコメントスレッドから、私はざっと読みましたが、詳細には読んでいませんが、根本的な原因は、マシンのルート構成ファイルのエラーであるように見えます。これは、?ごとに1回だけ解析されます。AppDomain
したがって、2回目以降はエラーが発生しません。
一度それによって燃やされたこの構造を習慣的に使用することは、プログラマーがハードな経験を通して蓄積する一種の習慣です。経験の浅い人は「カーゴカルト」や「偶然の一致によるプログラミング」をかじる可能性があり、経験のある人はただ微笑んでうなずきます。