我試圖使用.NET 4.5的新regular expression match timeout,特別是全局變量通過AppDomain.CurrentDomain.SetData
與"REGEX_DEFAULT_MATCH_TIMEOUT"
屬性(您傳遞的變體正則表達式構造函數TimeSpan
工作正常)。全局正則表達式匹配超時適用於控制檯應用程序,但不適用於ASP.NET MVC應用程序
當我創建這個main方法一個新的控制檯應用程序:
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$");
}
它按預期工作:三秒鐘後,它拋出一個RegexMatchTimeoutException
。
但是如果我創建一個空的MVC 4應用程序,添加一個HomeController
這個動作方法:
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();
}
,並參觀http://localhost:XXXXX/
不會拋出異常,比賽繼續努力。 (如果你等待足夠長的時間,它會最終完成,然後抱怨缺少的觀點。這需要veeery長雖然)。
調用SetData
在Global.asax
的Application_Start()
,而不是內部的控制器動作不使超時發生。
你可以嘗試初始化新的正則表達式對象http://msdn.microsoft.com/en-us/library/hh160196.aspx並嘗試設置匹配超時只爲這個正則表達式?如果它不會工作 - 我會建議你提交一個錯誤在https://connect.microsoft.com/ – outcoldman
@outcoldman正如我在我的問題中所說,構造函數變種工作正常。 – balpha