WCF服务中的会话变量

时间:2014-08-29 06:49:30

标签: wcf session-variables wcf-sessions

我只是创建一个普通的wcf服务,它获取Person对象并返回List。我需要在会话中保存传入的Person对象并返回列表。我已经实现了如下代码

[AspNetCompatibilityRequirements(RequirementsMode= AspNetCompatibilityRequirementsMode.Required)]
public class Service1 : IService1
{
    public List<Person> getPerson(Person person)
    {
        List<Person> persons;
        if (HttpContext.Current.Session["personList"] != null)
        {
            persons = (List<Person>)HttpContext.Current.Session["personList"];
        }
        else
        {
            persons = new List<Person>();
        }
        persons.Add(person);
        HttpContext.Current.Session["personList"] = persons;

        return persons;
    }
}

但总是只得到我在参数中传递的对象。不是整个系列。因此,session始终返回null。我错过了什么?

2 个答案:

答案 0 :(得分:1)

返回响应后,当前会话的范围立即生效。 您需要创建一个会话管理器类。 请参阅下面的工作代码: -

    [AspNetCompatibilityRequirements(RequirementsMode= AspNetCompatibilityRequirementsMode.Required)]
    public class Service1 : IService1
    {
        public List<Person> getPerson(Person person)
        {
            SessionManager.PersonCollectionSetter = person;
            return SessionManager.PersonCollectionGetter;
        }
    }
    public static class SessionManager
    {
        private static List<Person> m_PersonCollection = new List<Person>();
        public static Person PersonCollectionSetter
        {
            set
            {
                m_PersonCollection.Add(value);
            }
        }

        public static List<Person> PersonCollectionGetter
        {
            get
            {
                return m_PersonCollection;
            }
        }
    }

答案 1 :(得分:0)

您的服务合同需要以下装饰

ServiceContract(SessionMode=SessionMode.Required)   

但请注意,您只能通过binding

等安全wsHttpBinding维护会话状态