2016-02-04 2 views
-1

У меня есть приложение asp.net Web API:Невозможно сериализовать класс, используя режим сервера State

Web.config

<system.web> 
    <sessionState mode="StateServer" timeout="1500" /> 
    <authentication mode="None" /> 
    <compilation debug="true" targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5" /> 
    <globalization culture="fr-FR" uiCulture="fr" /> 
    </system.web> 

В контроллере

ITaigaTimeSheet itaiga; 

public TaigaApiController() 
{ 
    if (HttpContext.Current.Session["taigaclass"] == null) 
    { 
     string mail = (string)HttpContext.Current.Session["User_mail"]; 
     HttpContext.Current.Session["taigaclass"] = new TaigaTimeSheet(mail); 
    } 
    itaiga = (TaigaTimeSheet)HttpContext.Current.Session["taigaclass"]; 
} 

В BLL

[Serializable()] 
public partial class TaigaTimeSheet : ITaigaTimeSheet 
{ 
    ITaigaClient client = null; 
    Itimesheet SabCruder = null; 
    ICrud<vw_sab_client_affaire> cruder = null; 
    List<Project> taigaProjets = new List<Project>(); 
    List<Member> taigaMembers = new List<Member>(); 
    List<vw_sab_client_affaire> client_affaires = new List<vw_sab_client_affaire>(); 
    List<vw_sab_client_affaire> All_client_affaires = new List<vw_sab_client_affaire>(); 
    public TaigaTimeSheet() 
    { 
     client = new TaigaClient(); 
     client.GetMembersAndProjects(ref taigaProjets, ref taigaMembers); 
     SabCruder = new Timesheet(); 
     cruder = new Crud<vw_sab_client_affaire>("stblinked"); 
     client_affaires = cruder.GetAll().ToList(); 
     All_client_affaires = cruder.GetAll().ToList(); 
    } 
} 

Мне нужно сохранить экземпляр класса TaigaTimeSheet в качестве переменной сеанса, используя режим StateServer.

Но я получаю это исключение:

Невозможно сериализации состояния сеанса. В режиме «StateServer» и «SQLServer» ASP.NET будет сериализовать объекты состояния сеанса, и в результате не разрешаются объекты, не связанные с сериализацией, или объекты MarshalByRef. Такое же ограничение применяется, если аналогичная сериализация выполняется в пользовательском хранилище состояний сеанса в режиме «Пользовательский».

Так что мне нужно знать:

  1. Как я могу это исправить?
  2. В чем причина этой ошибки?

Спасибо,

+0

@Downvoter объясняет ваши причины –

+0

Что такое клиент ITaigaClient? – Viru

+0

Ошибка в основном говорит о том, что в вашем классе TiageTiemSheet есть некоторые несериализуемые объекты, которые не разрешены для сериализации ..... Я предлагаю вам добавить несериализуемый атрибут для членов, которые вам не нужны ... – Viru

ответ

1

Для целей тестирования, отметьте Everthing как nonserializable кроме taigaProjects и taigaMembers.

Ошибка в основном говорит о том, что в вашем классе TiageTiemSheet есть некоторые несериализуемые объекты, которые не разрешены для serialization.I предлагаю вам добавить несериализуемый атрибут для членов, которые вам не нужны.

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