无法使用状态服务器模式

时间:2016-02-04 08:53:31

标签: c# asp.net .net asp.net-mvc serialization

我有一个asp.net web api应用程序:

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的实例存储为会话变量。

但我得到了这个例外:

  

无法序列化会话状态。在&#39; StateServer&#39;和&#39; SQLServer&#39;在模式下,ASP.NET将序列化会话状态对象,因此不允许使用不可序列化的对象或MarshalByRef对象。如果自定义会话状态存储在&#39;自定义&#39;中进行类似的序列化,则适用相同的限制。模式。

所以我需要知道:

  1. 我该如何解决这个问题?
  2. 出现此错误的原因是什么?
  3. 谢谢,

1 个答案:

答案 0 :(得分:1)

出于测试目的,除了taigaProjects和taigaMembers之外,将everthing标记为不可序列化。

错误基本上说你的TiageTiemSheet类中有一些不可序列化的对象,不允许用于serilization。我建议你向你不需要的成员添加非序列化属性。