2015-05-11 40 views
0

我正在尝试在配置了SqlServer会话状态模式的应用程序中使用MvcSiteMapProvider。 不过,我得到一个异常的那一刻我称之为的RegisterRoutes方法XmlSiteMapController类的,就像这样:MvcSiteMapProvider是否支持“Sql Server”会话状态?

public static void RegisterRoutes(RouteCollection routes) 
{ 
    // ... 
    routes.MapRoute(
     "Default", 
     "{controller}/{action}/{id}", 
     new { controller = "Home", action = "Index", id = "" } 
     ); 

    // Add our route registration for MvcSiteMapProvider sitemaps 
    MvcSiteMapProvider.Web.Mvc.XmlSiteMapController.RegisterRoutes(routes); 
} 

然后我得到一个异常说

类型“的System.Web .Routing.RouteValueDictionary'in Assembly'System.Web,Version = 4.0.0.0,Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a'未标记为可序列化。

这让我觉得MvcSiteMapProvider不支持SqlServer会话状态模式。可以?

谢谢!

回答

0

除非您定制了它,否则MvcSiteMapProvider不以任何方式与会话状态交互。所以,它应该适用于任何会话状态模式(我没有用SqlServer模式测试过,所以如果你继续有问题,我建议你打开一个new issue)。请参阅How to Make MvcSiteMapProvider Remember a User's Position了解如何在没有会话状态的情况下运行。

发布的错误表明您的应用程序正试图序列化System.Web.Routing.RouteValueDictionary,这不是MvcSiteMapProvider所做的。

在附注上,只要您已安装MvcSiteMapProvider.MVC4 NuGet软件包,则无需从MVC 4应用程序显式调用XmlSiteMapController.RegisterRoutes。该方法使用WebActivator自动调用。通过调用它两次可能会有问题。

+0

嗨!的确,它与MvcSiteMapProvider无关。对不起。它可能是另一个试图在会话中保存它的组件。感谢您的关注。 – user4887773

0

MvcSiteMapProvider需要与状态服务器交互,如果你想出于任何原因将节点放入会话状态。我这样做是为了跟踪我已经与节点关联的对象,因为MvcSiteMapProvider在每个新请求时都会忘记任何状态信息。

如果您下载代码,您可以将项目添加到解决方案中。

如果你做了更换和

更换public class[System.Serializable]\r\n\public class

还与[System.Serializable]\r\n\public abstract class

的替代public abstract class删除属性关闭JavaScriptSerializerAdapter类。

那么它将可用于状态服务器。