2014-02-14 91 views
5

我動態添加路由到RouteTable,但更新不會傳播到其他進程:在Web園中添加動態路由

using (RouteTable.Routes.GetWriteLock()) 
{ 
    RouteTable.Routes.MapPageRoute(
     String.Format("_{0}", routeName), 
     routeName, 
     "~/Template.aspx", 
     true, 
     new RouteValueDictionary {{"page", routeName}}); 
} 

這正確地創建了正確的路線,因爲我有時可以訪問它,但如果切換到新的進程,或者稍後嘗試,我無法訪問該頁面。 如果我然後重新啓動應用程序池,它工作正常。此外,如果我等待足夠長的時間,幾個小時,當這些流程被回收利用時,這些路線就可以工作。

我在想這是在一個過程中創建路線的結果,只有在未來的過程回收中。

乾草想法如何推動路線更新?

回答

1

我覺得問題在於執行Routes。我們可以看到here - RouteTable.Routes是靜態的。所以這裏的問題並不是爲什麼這些路由不是爲了傳播所有進程,而是爲了解決網絡問題中的一個靜態變量。

試圖想出一個解決方法,我可以想出一個類似於集羣中Web園林進程/ Web服務器之間共享緩存的解決方案。您需要獲取動態路由列表OutProc以及一個DB或靜態文件。然後,您的代碼需要跟蹤這些文件以進行更改,並在將新路由添加到外部資源時添加新路由。