Próbuję użyć nowego regular expression match timeout .NET 4.5, w szczególności wariantu globalnego, za pośrednictwem AppDomain.CurrentDomain.SetData
z właściwością "REGEX_DEFAULT_MATCH_TIMEOUT"
(wariant, w którym można przejść a TimeSpan
do konstruktora regex działa poprawnie).Limit czasu dopasowywania globalnego wyrażenia działa w aplikacji konsolowej, ale nie w aplikacji ASP.NET MVC
Kiedy utworzyć nową aplikację konsoli z tym główne metody:
static void Main(string[] args)
{
AppDomain.CurrentDomain.SetData("REGEX_DEFAULT_MATCH_TIMEOUT",
TimeSpan.FromSeconds(3));
var m = System.Text.RegularExpressions.Regex.Match(
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "^(x+x+)+y$");
}
to działa zgodnie z oczekiwaniami: Po trzech sekundach, to rzuca RegexMatchTimeoutException
.
Jednakże jeśli utworzyć pusty MVC 4 aplikację, dodać metodę HomeController
i to działanie:
public ActionResult Index()
{
AppDomain.CurrentDomain.SetData("REGEX_DEFAULT_MATCH_TIMEOUT",
TimeSpan.FromSeconds(3));
var m = System.Text.RegularExpressions.Regex.Match(
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "^(x+x+)+y$");
return View();
}
i odwiedzić http://localhost:XXXXX/
żaden wyjątek i próba mecz trwa. (Jeśli poczekasz wystarczająco długo, to będzie ostatecznie zakończyć, a potem narzekają brakującego widzenia. To trwa baaardzo długo.)
nazywając SetData
w Global.asax
„s Application_Start()
zamiast zasięgu działania kontroler nie sprawiają, że limit czasu również się zdarzyć.
Czy możesz spróbować zainicjować nowy obiekt regex http://msdn.microsoft.com/en-us/library/hh160196.aspx i spróbować ustawić Czas dopasowywania tylko dla tego wyrażenia regularnego? Jeśli to nie zadziała - zaproponuję zgłoszenie błędu na https://connect.microsoft.com/ – outcoldman
@ outcoldman Jak już powiedziałem w moim pytaniu, wariant konstruktora działa dobrze. – balpha