5

在查看 Ayende 的 Racoon 博客的来源时,我在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();
    }
}

这需要一些时间才能弄清楚。

从下面的评论线程中,我已经略读但没有详细阅读,根本原因似乎是机器根配置文件中的错误,该文件每次只解析一次?AppDomain,因此第二次和随后的时间没有错误。

习惯性地使用这种被它烧过一次的构造是程序员通过艰苦的经验积累起来的一种习惯。经验不足的人可能会窃笑“货物崇拜”或“巧合的编程”,经验丰富的人只会微笑和点头。

于 2012-11-15T15:47:45.193 回答