在Web Gardens中添加动态路由

Mat*_*hew 5 asp.net routing webforms url-rewriting web-garden

我正在向RouteTable动态添加路由,但更新不会传播到其他进程:

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

这正确地创建了正确的路由,因为我有时可以访问它,但是如果切换到新进程或稍后再尝试,我就无法访问该页面.如果我然后重新启动应用程序池,它工作正常.此外,如果我等待足够长的时间,几个小时,当流程被回收,路线工作.

我认为这是在一个进程上创建路由的结果,并且仅在未来的进程回收中.

干草关于如何推动路线更新的想法?

Ela*_*hmi 1

我认为问题出在实施上Routes正如我们在这里看到的-RouteTable.Routes是静态的。因此,这里的问题不是为什么路由没有传播到所有进程,而是更多的是网络花园问题中的静态变量。

试图想出一个解决方法,我能想到的是一个类似于集群中网络花园进程/网络服务器之间共享缓存的解决方案。您需要将动态路由列表放入OutProc数据库或静态文件中。然后,您的代码需要跟踪这些文件的更改,并在将它们添加到外部资源时添加新路由。