MvcSiteMapProvider 是否支持 "Sql Server" 会话状态?
Does MvcSiteMapProvider support "Sql Server" session state?
我正在尝试在配置有 SqlServer 会话状态模式的应用程序中使用 MvcSiteMapProvider。
但是,当我调用 XmlSiteMapController class 的 RegisterRoutes 方法时出现异常,如下所示:
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);
}
然后我得到一个异常
Type 'System.Web.Routing.RouteValueDictionary' in Assembly 'System.Web, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a' is not marked as serializable.
这让我觉得 MvcSiteMapProvider 不支持 SqlServer 会话状态模式。是吗?
谢谢!
除非您对其进行了自定义,否则 MvcSiteMapProvider
不会以任何方式与会话状态交互。所以,它应该适用于任何会话状态模式(我没有用 SqlServer 模式测试它,所以如果你仍然遇到问题,我建议你打开一个 new issue about it). Please see How to Make MvcSiteMapProvider Remember a User's Position 来解释它在没有会话状态的情况下如何工作。
发布的错误表明您的应用程序正在尝试序列化 System.Web.Routing.RouteValueDictionary
,这不是 MvcSiteMapProvider
所做的事情。
附带说明一下,只要安装了 MvcSiteMapProvider.MVC4
NuGet 程序包,就无需从 MVC 4 应用程序显式调用 XmlSiteMapController.RegisterRoutes
。使用 WebActivator 自动调用此方法。调用它两次可能会遇到问题。
MvcSiteMapProvider
如果您出于任何原因想要将节点置于会话状态,则需要与状态服务器进行交互。我这样做是为了跟踪我与节点关联的对象,因为 MvcSiteMapProvider
会忘记每个新请求的任何状态信息。
如果您下载代码,您可以将项目添加到您的解决方案中。
如果你做一个替换
将public class
替换为[System.Serializable]\r\n\public class
同时将 public abstract class
替换为 [System.Serializable]\r\n\public abstract class
移除 JavaScriptSerializerAdapter
class 的属性。
然后它将可用于状态服务器。
我正在尝试在配置有 SqlServer 会话状态模式的应用程序中使用 MvcSiteMapProvider。 但是,当我调用 XmlSiteMapController class 的 RegisterRoutes 方法时出现异常,如下所示:
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);
}
然后我得到一个异常
Type 'System.Web.Routing.RouteValueDictionary' in Assembly 'System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' is not marked as serializable.
这让我觉得 MvcSiteMapProvider 不支持 SqlServer 会话状态模式。是吗?
谢谢!
除非您对其进行了自定义,否则 MvcSiteMapProvider
不会以任何方式与会话状态交互。所以,它应该适用于任何会话状态模式(我没有用 SqlServer 模式测试它,所以如果你仍然遇到问题,我建议你打开一个 new issue about it). Please see How to Make MvcSiteMapProvider Remember a User's Position 来解释它在没有会话状态的情况下如何工作。
发布的错误表明您的应用程序正在尝试序列化 System.Web.Routing.RouteValueDictionary
,这不是 MvcSiteMapProvider
所做的事情。
附带说明一下,只要安装了 MvcSiteMapProvider.MVC4
NuGet 程序包,就无需从 MVC 4 应用程序显式调用 XmlSiteMapController.RegisterRoutes
。使用 WebActivator 自动调用此方法。调用它两次可能会遇到问题。
MvcSiteMapProvider
如果您出于任何原因想要将节点置于会话状态,则需要与状态服务器进行交互。我这样做是为了跟踪我与节点关联的对象,因为 MvcSiteMapProvider
会忘记每个新请求的任何状态信息。
如果您下载代码,您可以将项目添加到您的解决方案中。
如果你做一个替换
将public class
替换为[System.Serializable]\r\n\public class
同时将 public abstract class
替换为 [System.Serializable]\r\n\public abstract class
移除 JavaScriptSerializerAdapter
class 的属性。
然后它将可用于状态服务器。