2012-09-20 14 views
5

Patrząc na źródło Ayende za Racoon Blog, widziałem to w global.asax.cs:Co to jest błąd Uri w .NET, o którym wspomina Ayende w kodzie źródłowym Raccoon Blog?

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

To wydaje się być obejście błędu, co dzieje się na pierwsze żądanie. Czy ktoś wie, co to jest błąd lub jak go odtworzyć?

+0

Czy rzeczywiście miałeś problem z tym, czy po prostu się zastanawiasz, ponieważ zobaczyłeś to w tym kodzie? To działa dobrze dla mnie i przeglądając konstruktor 'Uri' w ILSpy, nie wygląda na to, że mogłoby zawieść. Warunki, które spowodują, że konstruktor rzuci "UriFormatException": http://msdn.microsoft.com/en-us/library/z6c2z492(v=vs.100).aspx – Gromer

+0

Usunąłeś go i zobaczysz, że coś się nie udało? – Paparazzi

+2

Nie, nie spotkałem się z problemem, to jest powód dla którego warto zapytać, ponieważ nie sądzę, żeby go tam umieszczali tylko dla zabawy. Dobrze byłoby wiedzieć, czy i kiedy można uniknąć porażki. –

Odpowiedz

2

Trochę googling dostaje this Ayende blog post od marca 2010 roku, z którego cytuję fragment:

mogę odtworzyć tego teraz, tutaj to jak on się tam:

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(); 
    } 
} 

które miały niektóre czas się wymyślić.

Z wątku komentarza poniżej, który mam odtłuszczony, ale nie czytać w szczegółach, przyczyną źródłową wydaje się być błąd w głównym pliku konfiguracyjnym maszyny, który jest analizowany tylko raz na? AppDomain, stąd brak błędu w drugim i kolejnych czasach.

Zwykle używanie tego konstruktu, który został przez niego spalony, to nawyk, który programiści gromadzą poprzez ciężkie doświadczenia. Mniej doświadczeni mogą zachichotać "kultem ładunku" lub "programowaniem przez przypadek", do którego bardziej doświadczeni będą tylko uśmiechać się i kiwać głowami.

Powiązane problemy