2015-05-11 6 views
0

Я пытаюсь использовать MvcSiteMapProvider в приложении, которое настроено с использованием режима состояния сеанса SqlServer. Однако я получаю исключение в тот момент, я называю 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.

На боковой ноте вам не нужно вызывать XmlSiteMapController.RegisterRoutes явно из приложения MVC 4, если вы установили пакет NuGet MvcSiteMapProvider.MVC4. Этот метод вызывается автоматически с использованием WebActivator. Возможно, у вас могут возникнуть проблемы, вызвав их дважды.

+0

Привет! Действительно, это не имело никакого отношения к MvcSiteMapProvider. Простите за это. Это может быть другой компонент, который пытается сохранить свои вещи в сеансе. Спасибо за внимание. – user4887773

0

MvcSiteMapProvider необходимо будет взаимодействовать с государственными серверами, если вы хотите поместить узел в состояние сеанса по любой причине. Я делаю это, чтобы отслеживать объекты, которые я связал с узлами, поскольку MvcSiteMapProvider забывает любую информацию о состоянии каждого нового запроса.

Если вы загружаете код, вы можете добавить проект в свое решение.

Если вы делаете замены и

Заменить public class с [System.Serializable]\r\n\public class

также заменить public abstract class с [System.Serializable]\r\n\public abstract class

The удалить атрибут от JavaScriptSerializerAdapter класса.

тогда он будет использоваться с государственными серверами.

 Смежные вопросы

  • Нет связанных вопросов^_^