我正在向RouteTable动态添加路由,但更新不会传播到其他进程:
using (RouteTable.Routes.GetWriteLock())
{
RouteTable.Routes.MapPageRoute(
String.Format("_{0}", routeName),
routeName,
"~/Template.aspx",
true,
new RouteValueDictionary {{"page", routeName}});
}
这正确地创建了正确的路由,因为我有时可以访问它,但是如果切换到新进程或稍后再尝试,我就无法访问该页面。 如果我然后重新启动应用程序池,它工作正常。此外,如果我等待足够长的时间,几个小时,当流程被回收时,路线也会起作用。
我认为这是在一个进程上创建路由的结果,并且仅在未来进程回收时才会生成。
关于如何推动路线更新的想法?
答案 0 :(得分:1)
我认为问题在于Routes
的实施。我们可以看到here - RouteTable.Routes
是静态的。所以这里的问题不是为什么路由不会传播到所有进程,而是更多的是web园问题中的静态变量。
尝试考虑一种解决方法,我能提出的解决方案类似于群集中的Web园林进程/ Web服务器之间的共享缓存。您需要将动态路由OutProc
列表添加到数据库或静态文件中。然后,您的代码需要跟踪这些文件以进行更改,并在将新路由添加到外部资源时添加新路由。