5

AyendeのRac​​oonブログのソースを見ている間、私はこれを見ましたglobal.asax.cs

// Work around nasty .NET framework bug
try
{
    new Uri("http://fail/first/time?only=%2bplus");
}
catch (Exception)
{
}

これは、最初のリクエストで発生するバグの回避策のようです。誰かがバグが何であるか、またはそれを再現する方法を知っていますか?

4

1 に答える 1

2

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回目以降はエラーが発生しません。

一度それによって燃やされたこの構造を習慣的に使用することは、プログラマーがハードな経験を通して蓄積する一種の習慣です。経験の浅い人は「カーゴカルト」や「偶然の一致によるプログラミング」をかじる可能性があり、経験のある人はただ微笑んでうなずきます。

于 2012-11-15T15:47:45.193 に答える